asp下利用xml打包网站文件
2014-08-10来源:易贤网

这个方法可以把整个文件夹打包到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>

更多信息请查看IT技术专栏

推荐信息