本博文主要提供实现安全绿色的网络空间课堂的数据结构及C++Builder核心代码,全文分为三个部分:
程序下载网址:网盘下载
链接:https://pan.baidu.com/s/1blzPOVRUrCbKIeu8XOaSVg
提取码:r80x
第一部分:用5种状态进行控制,实现脚本解析的C++Builder代码
用5种状态进行控制,实现脚本解析的C++Builder代码,在Win10+Embarcadero RAD Studio 10.3下调试通过,基于IdHTTPServer中间件的“普鲁托安全Web应用服务程序”Pluto.exe运行正常稳定。目前,最新稳定版本为V1.9.9.2版,也是文章投稿时的版本。
函数声明:AnsiString videoPlay(AnsiString sFileName,AnsiString sID);
//const int BUFF 2048;//1024
//AnsiString sRetVideo;
AnsiString sFileContent=sTsimpleVideo;//Memo2->Lines->Text;// "";
/*定义变量:标题,作者,视频文件名称*/
String sSpaceName="";
String sTitle="";
String sAuthor="";
String sFile="";
String sFooter="";
FILE *licFile = fopen(sFileName.c_str(),"r");
if (licFile == NULL)
{
printf("OPEN失败\n");
}
else
{
char sLine[FILEBUFF];//[1024];
AnsiString stLine;
memset(sLine, 0, FILEBUFF);//1024);
int istatus=0;// 状态:0初始态,1逐行态,2数组态开始,3数组态结束,4代码态sCode,5结束态
//一行行读
while ((fgets(sLine, FILEBUFF, licFile))!= NULL && istatus<5)
{
stLine=sLine;
//RichEdit1->Lines->Add(stLine);
//剔除行后注释
int iPos =stLine.Pos("//");// str.find(target); //int iLen =stLine.Length();
// RichEdit1->Lines->Add(iPos);
if(iPos==1)
continue;//break; //跳过注释行,继续读取下一行
else if(iPos>1)
stLine=stLine.SubString(1,iPos-1);
//else
// RichEdit1->Lines->Add(istatus);
//sFileContent+=sLine;
//RichEdit1->Lines->Add(stLine);
if(stLine.Pos("<%")>0)
{
istatus=1;//开始
continue;
}
//stLine=StringReplace(sCode,"\n","",TReplaceFlags()<
switch(istatus)
{
case 0:
break;
case 1:
//逐行开始
if(stLine.Pos("sSpaceName=")>0)
{
sSpaceName=StringReplace(stLine,"sSpaceName=","",TReplaceFlags()<
}
else if(stLine.Pos("sTitle=")>0)
{
sTitle=StringReplace(stLine,"sTitle=","",TReplaceFlags()<
}
else if(stLine.Pos("sAuthor=")>0)
{
sAuthor=StringReplace(stLine,"sAuthor=","",TReplaceFlags()<
}
else if(stLine.Pos("sFile=")>0)
{
sFile=StringReplace(stLine,"sFile=","",TReplaceFlags()<
}
else if(stLine.Pos("[]=")>0)
{
istatus=2;
}
else if(stLine.Pos("sFooter=")>0)
{
istatus=4;
}
break;
case 2: //数组态开始
if(stLine.Pos("[]end")>0)
{
istatus=3; //数组结束 //sFile=StringReplace(stLine,"sFile=","",TReplaceFlags()<
}
else
{
AnsiString sTempID;
if(stLine.Pos(":")>1)
{
sTempID=stLine.SubString(1,stLine.Pos(":")-1);
if(sFooter.Pos(" target= _blank>" + sTempID + " ")<1)
sFooter+="" + sTempID + " ";
if(sTempID==sID)
{
//RichEdit1->Lines->Add(sID);
stLine=stLine.SubString(stLine.Pos(":")+1,stLine.Length()-stLine.Pos(":"));
// RichEdit1->Lines->Add(stLine);
if(stLine.Pos("sSpaceName=")>0)
{ sSpaceName=StringReplace(stLine,"sSpaceName=","",TReplaceFlags()<
//sFileContent=StringReplace(sFileContent,"<%=sSpaceName%>",sSpaceName,TReplaceFlags()<
//RichEdit1->Lines->Add(sSpaceName);
}
else if(stLine.Pos("sTitle=")>0)
{
sTitle=StringReplace(stLine,"sTitle=","",TReplaceFlags()<
//sFileContent=StringReplace(sFileContent,"<%=sTitle%>",sTitle,TReplaceFlags()<
// RichEdit1->Lines->Add(sTitle);
}
else if(stLine.Pos("sAuthor=")>0)
{
sAuthor=StringReplace(stLine,"sAuthor=","",TReplaceFlags()<
//sFileContent=StringReplace(sFileContent,"<%=sAuthor%>",sAuthor,TReplaceFlags()<
//RichEdit1->Lines->Add(sAuthor);
}
else if(stLine.Pos("sFile=")>0)
{ sFile=StringReplace(stLine,"sFile=","",TReplaceFlags()<
}
}
}
}
break;
case 3://数组结束
if(stLine.Pos("sFooter=")>0)
istatus=4; //代码态开始
break;
case 4://代码态
if(stLine.Pos("%>")>0)
{
istatus=5; //结束态
//RichEdit1->Lines->Add(sFooter);
//sFileContent=StringReplace(sFileContent,"<%=sFooter%>",sFooter,TReplaceFlags()<
}
else
{
sFooter+=stLine;
}
break;
case 5: //结束态
;
break;
}
}
fclose(licFile);
sFileContent=StringReplace(sFileContent,"<%=sSpaceName%>",sSpaceName,TReplaceFlags()<
sFileContent=StringReplace(sFileContent,"<%=sTitle%>",sTitle,TReplaceFlags()<
sFileContent=StringReplace(sFileContent,"<%=sAuthor%>",sAuthor,TReplaceFlags()<
sFileContent=StringReplace(sFileContent,"<%=sFile%>",sFile,TReplaceFlags()<
sFileContent=StringReplace(sFileContent,"<%=sFooter%>",sFooter,TReplaceFlags()<
}
return sFileContent;
//作者:一策书(湘岳阳万江波)
第二部分:以yanzhou.vsp脚本文件为例,讲解《2016——2019xx市数学中考试卷压轴题解析》的视频集制作的示例代码
示例代码文件为yanzhou.vsp,示例内容如下:
//定义变量:标题,作者,视频文件名称*
//String sSpaceName="";
//String sTitle="";
//String sAuthor="";
//String sFile="";
<%
sSpaceName=2016——2019岳阳市数学中考试卷压轴题解析
sAuthor=张大庆
sTitle=岳阳市数学中考试卷2016年第08题
sFile=yazhou/16-08.mp4
[]=;//数组开始,标题,作者,文件路径
16-08:sTitle=岳阳市数学中考试卷2016年第08题
16-08:sFile=yazhou/16-08.mp4
16-16:sTitle=岳阳市数学中考试卷2016年第16题
16-16:sFile=yazhou/16-16.mp4
16-23:sTitle=岳阳市数学中考试卷2016年第23题
16-23:sFile=yazhou/16-23.mp4
16-24:sTitle=岳阳市数学中考试卷2016年第24题
16-24:sFile=yazhou/16-24.mp4
17-08:sTitle=岳阳市数学中考试卷2017年第08题
17-08:sFile=yazhou/17-08.mp4
17-16:sTitle=岳阳市数学中考试卷2017年第16题
17-16:sFile=yazhou/17-16.mp4
17-23:sTitle=岳阳市数学中考试卷2017年第23题
17-23:sFile=yazhou/17-23.mp4
17-24:sTitle=岳阳市数学中考试卷2017年第24题
17-24:sFile=yazhou/17-24.mp4
18-08:sTitle=岳阳市数学中考试卷2018年第08题
18-08:sFile=yazhou/18-08.mp4
18-16:sTitle=岳阳市数学中考试卷2018年第16题
18-16:sFile=yazhou/18-16.mp4
18-23:sTitle=岳阳市数学中考试卷2018年第23题
18-23:sFile=yazhou/18-23.mp4
18-24:sTitle=岳阳市数学中考试卷2018年第24题
18-24:sFile=yazhou/18-24.mp4
19-08:sTitle=岳阳市数学中考试卷2019年第08题
19-08:sFile=yazhou/19-08.mp4
19-16:sTitle=岳阳市数学中考试卷2019年第16题
19-16:sFile=yazhou/19-16.mp4
19-23:sTitle=岳阳市数学中考试卷2019年第23题
19-23:sFile=yazhou/19-23.mp4
19-24:sTitle=岳阳市数学中考试卷2019年第24题
19-24:sFile=yazhou/19-24.mp4
[]end;//数组结束
sFooter=
%>
//作者:一策书(湘岳阳万江波)
第三部分:判断文件名设置不同的ContentType的类型值,解决了.js,.zip等文件的问题。
AnsiString TfrmHttpServer::GetContentType(AnsiString strReq)
{
AnsiString strctype;
if(strReq.Pos(".mp4")>0) //文件类型
{
strctype = "video/mpeg4";
}
else if(strReq.Pos(".mp3")>0) //文件类型,
{
strctype = "audio/mp3";
}
else if(strReq.Pos(".jpg")>0) //文件类型,
{
strctype = "image/jpeg";
}
else if(strReq.Pos(".png")>0) //文件类型,
{
strctype = "application/x-png";
}
else if(strReq.Pos(".css")>0) //文件类型,
{
strctype = "text/css";
}
else if(strReq.Pos(".js")>0) //文件类型,
{
strctype = "application/x-javascript";
}
//else if(strReq.Pos(".mp4")>0) //文件类型
//{
// strctype = "video/mpeg4";
//}
else if(strReq.Pos(".ico")>0) //文件类型
{
strctype = "image/x-icon";
}
else if(strReq.Pos(".html")>0|strReq.Pos(".htm")>0|strReq.Pos(".vsp")>0) //文件类型
{
strctype ="text/html";
}
else
{
strctype ="application/octet-stream";//.*( 二进制流,不知道下载文件类型)
}
return strctype;
//参考文献:response的contentType 几种类型 https://blog.csdn.net/qq_37651267/article/details/91380351
}
作者:一策书(湘岳阳万江波)