评论

收藏

[XML/XSL] asp下利用xml打包网站文件

开发技术 开发技术 发布于:2021-06-29 10:35 | 阅读数:442 | 评论:0

这个方法可以把整个文件夹打包到xml文件中,把这个xml文件文件和解包文件放在一起后,运行解包文件就可以把原来的文件释放出来,这样我们就可以把网站打包上传到虚拟主机,再运行解包文件就可以了。我在本地测试之选择了少部分文件,不知在文件很多的情况执行效率如何。
    其实实现的思路也很简单,主要利用的是xml文件可以存放二进制数据的原理。有兴趣的朋友可以下载下面的附件研究下!!
解包文件
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> 
<% Option Explicit %> 
<% On Error Resume Next %> 
<% Response.Charset="UTF-8" %> 
<% Server.ScriptTimeout=99999999 %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>脚本之家——文件解包程序_www.jb51.net</title> 
</head> 
<body> 
<% 
Dim strLocalPath 
'得到当前文件夹的物理路径 
strLocalPath=Left(Request.ServerVariables("PATH_TRANSLATED"),InStrRev(Request.ServerVariables("PATH_TRANSLATED"),"")) 
Dim objXmlFile 
Dim objNodeList 
Dim objFSO 
Dim objStream 
Dim i,j 
Set objXmlFile = Server.CreateObject("Microsoft.XMLDOM") 
  objXmlFile.load(Server.MapPath("update.xml")) 
  If objXmlFile.readyState=4 Then 
    If objXmlFile.parseError.errorCode = 0 Then 
      Set objNodeList = objXmlFile.documentElement.selectNodes("//folder/path") 
      Set objFSO = CreateObject("Scripting.FileSystemObject") 
        j=objNodeList.length-1 
        For i=0 To j 
          If objFSO.FolderExists(strLocalPath & objNodeList(i).text)=False Then 
            objFSO.CreateFolder(strLocalPath & objNodeList(i).text) 
          End If 
          Response.Write "创建目录" & objNodeList(i).text & "<br/>" 
          Response.Flush 
        Next 
      Set objFSO = nothing 
      Set objNodeList = nothing 
      Set objNodeList = objXmlFile.documentElement.selectNodes("//file/path") 
        j=objNodeList.length-1 
        For i=0 To j 
          Set objStream = CreateObject("ADODB.Stream") 
            With objStream 
              .Type = 1 
              .Open 
              .Write objNodeList(i).nextSibling.nodeTypedvalue 
              .SaveToFile strLocalPath & objNodeList(i).text,2 
              Response.Write "释放文件" & objNodeList(i).text & "<br/>" 
              Response.Flush 
              .Close 
            End With 
          Set objStream = Nothing 
        Next 
      Set objNodeList = nothing 
    End If 
  End If 
Set objXmlFile = Nothing 
response.write "文件解包完毕" 
%> 
</body> 
</html>
pack.asp 打包文件
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> 
<% Option Explicit %> 
<% On Error Resume Next %> 
<% Response.Charset="UTF-8" %> 
<% Server.ScriptTimeout=99999999 %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>文件打包程序_脚本之家_www.jb51.net</title> 
</head> 
<body> 
<% 
Dim ZipPathDir,ZipPathFile 
Dim startime,endtime 
'在此更改要打包文件夹的路径 
ZipPathDir = "D:\testasp\dictionary\xmlPacked\scrollColor"' 
ZipPathFile = "update.xml" 
if right(ZipPathDir,1)<>"" then ZipPathDir=ZipPathDir&"" 
'开始打包 
CreateXml(ZipPathFile) 
'遍历目录内的所有文件以及文件夹 
sub LoadData(DirPath) 
  dim XmlDoc 
  dim fso      'fso对象 
  dim objFolder    '文件夹对象 
  dim objSubFolders  '子文件夹集合 
  dim objSubFolder   '子文件夹对象 
  dim objFiles     '文件集合 
  dim objFile    '文件对象 
  dim objStream 
  dim pathname,TextStream,pp,Xfolder,Xfpath,Xfile,Xpath,Xstream 
  dim PathNameStr 
  response.Write("=========="&DirPath&"==========<br>") 
  set fso=server.CreateObject("scripting.filesystemobject") 
  set objFolder=fso.GetFolder(DirPath)'创建文件夹对象 
  Response.Write DirPath 
  Response.flush 
  Set XmlDoc = Server.CreateObject("Microsoft.XMLDOM") 
  XmlDoc.load Server.MapPath(ZipPathFile) 
  XmlDoc.async=false 
  '写入每个文件夹路径 
  set Xfolder = XmlDoc.SelectSingleNode("//root").AppendChild(XmlDoc.CreateElement("folder")) 
  Set Xfpath = Xfolder.AppendChild(XmlDoc.CreateElement("path")) 
    Xfpath.text = replace(DirPath,ZipPathDir,"") 
    set objFiles=objFolder.Files 
      for each objFile in objFiles 
        if lcase(DirPath & objFile.name) <> lcase(Request.ServerVariables("PATH_TRANSLATED")) then 
          Response.Write "---<br/>" 
          PathNameStr = DirPath & "" & objFile.name 
          Response.Write PathNameStr & "" 
          Response.flush 
          '================================================ 
          '写入文件的路径及文件内容 
           set Xfile = XmlDoc.SelectSingleNode("//root").AppendChild(XmlDoc.CreateElement("file")) 
           Set Xpath = Xfile.AppendChild(XmlDoc.CreateElement("path")) 
             Xpath.text = replace(PathNameStr,ZipPathDir,"") 
           '创建文件流读入文件内容,并写入XML文件中 
           Set objStream = Server.CreateObject("ADODB.Stream") 
           objStream.Type = 1 
           objStream.Open() 
           objStream.LoadFromFile(PathNameStr) 
           objStream.position = 0 
           Set Xstream = Xfile.AppendChild(XmlDoc.CreateElement("stream")) 
             Xstream.SetAttribute "xmlns:dt","urn:schemas-microsoft-com:datatypes" 
             '文件内容采用二制方式存放 
             Xstream.dataType = "bin.base64" 
             Xstream.nodeTypedValue = objStream.Read() 
           set objStream=nothing 
           set Xpath = nothing 
           set Xstream = nothing 
           set Xfile = nothing 
          '================================================ 
        end if 
      next 
  Response.Write "<p>" 
  XmlDoc.Save(Server.Mappath(ZipPathFile)) 
  set Xfpath = nothing 
  set Xfolder = nothing 
  set XmlDoc = nothing 
  '创建的子文件夹对象 
  set objSubFolders=objFolder.Subfolders 
    '调用递归遍历子文件夹 
    for each objSubFolder in objSubFolders 
      pathname = DirPath & objSubFolder.name & "" 
      LoadData(pathname) 
    next 
  set objFolder=nothing 
  set objSubFolders=nothing 
  set fso=nothing 
end sub 
'创建一个空的XML文件,为写入文件作准备 
sub CreateXml(FilePath) 
  '程序开始执行时间 
  startime=timer() 
  dim XmlDoc,Root 
  Set XmlDoc = Server.CreateObject("Microsoft.XMLDOM") 
    XmlDoc.async = False 
    Set Root = XmlDoc.createProcessingInstruction("xml","version='1.0' encoding='UTF-8'") 
    XmlDoc.appendChild(Root) 
    XmlDoc.appendChild(XmlDoc.CreateElement("root")) 
    XmlDoc.Save(Server.MapPath(FilePath)) 
    Set Root = Nothing 
  Set XmlDoc = Nothing 
  LoadData(ZipPathDir) 
  '程序结束时间 
  endtime=timer() 
  response.Write("页面执行时间:" & FormatNumber((endtime-startime),3) & "秒") 
end sub 
%> 
</body> 
</html>
关注下面的标签,发现更多相似文章