以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 XML源码及示例(仅原创和转载) 』  (http://bbs.xml.org.cn/list.asp?boardid=32)
----  [原创][下载]利用XML打包指定文件夹 并上传到WEB目录中,自行解包  (http://bbs.xml.org.cn/dispbbs.asp?boardid=32&rootid=&id=23966)


--  作者:renxiang0731
--  发布时间:11/5/2005 11:53:00 AM

--  [原创][下载]利用XML打包指定文件夹 并上传到WEB目录中,自行解包
前两天下了个Z-BLOG,发现其安装程序有点意思,只有两个文件,一个数据文件,XML格式的,一个解包程序

此程序仿照Z-BLOG的安装程序数据文件逆向写出
希望对那些不能批量上传文件的网友有帮助
程序中如有问题或见解,还请大家指出。。
QQ:50489390

'========================
'文件1
'Pack.asp
'更改 Cpathname 这一变量
'将在当前目录生成一个DATA.XML文件
'将DATA.XML及文件2(install.asp)上传至WEB根目录
'运行install.asp解包
'手动删除以上两个文件
'========================
<% Option Explicit %>
<% On Error Resume Next %>
<%
Server.ScriptTimeout=99999999
dim Cpathname
dim startime,endtime

'在此更改要打包文件夹的路径
Cpathname = "F:\WEB\symr"

startime=timer()
function bianli(path)
 dim doc
    dim fso            'fso对象
    dim objFolder      '文件夹对象
    dim objSubFolders  '子文件夹集合
    dim objSubFolder   '子文件夹对象
    dim objFiles       '文件集合
    dim objFile        '文件对象
 dim objStream
    dim pathname,TextStream,pp,Xfolder,Xfpath,Xfile,Xpath,Xstream

    set fso=server.CreateObject("scripting.filesystemobject")
    set objFolder=fso.GetFolder(path)'创建文件夹对象
    
    Response.Write path
    Response.flush
    
 Set doc = Server.CreateObject("MSxml2.DOMDocument")
 doc.load Server.MapPath("data.xml")
 doc.async=false
 
 '写入每个文件夹路径
 set Xfolder = doc.SelectSingleNode("//z-blog").AppendChild(doc.CreateElement("folder"))
 Set Xfpath = Xfolder.AppendChild(doc.CreateElement("path"))
 Xfpath.text = replace(path,Cpathname,"")
    
    set objFiles=objFolder.Files
    for each objFile in objFiles
        Response.Write "
---"
     pp = path & "\" & objFile.name
     
         Response.Write pp & "
"
      Response.flush

      '================================================
      '写入文件的路径及文件内容
   set Xfile = doc.SelectSingleNode("//z-blog").AppendChild(doc.CreateElement("file"))
   
   Set Xpath = Xfile.AppendChild(doc.CreateElement("path"))
   Xpath.text = replace(pp,Cpathname,"")
   
   '创建文件流读入文件内容,并写入XML文件中
   Set objStream = Server.CreateObject("ADODB.Stream")
   objStream.Type = 1
   objStream.Open()
   objStream.LoadFromFile(pp)
   objStream.position = 0
   
   Set Xstream = Xfile.AppendChild(doc.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
   
      '================================================
    next
    Response.Write "<p>"
 
 doc.save server.mappath("data.xml")
 set Xfpath = nothing
 set Xfolder = nothing
    set doc = nothing
    
 '创建的子文件夹对象
 set objSubFolders=objFolder.Subfolders
    '调用递归遍历子文件夹
    for each objSubFolder in objSubFolders
  pathname=path + "\" + objSubFolder.name
  bianli(pathname)
    next
    
    set objFolder=nothing
    set objSubFolders=nothing
    set fso=nothing
end function

dim doc,objPI
'创建一个空的XML文件,为写入文件作准备
Set doc = Server.CreateObject("MSxml2.DOMDocument")
doc.async=false
set objPI = doc.createProcessingInstruction("xml","version='1.0' encoding='UTF-8'")
doc.insertBefore objPI, doc.childNodes(0)
doc.appendChild(doc.CreateElement("z-blog"))
doc.save server.mappath("data.xml")
set objPI = nothing
set doc = nothing
bianli(Cpathname)
endtime=timer()
%>
页面执行时间:<%=FormatNumber((endtime-startime),3)%>秒

'=================================
'文件2
'install.asp
'此文件改自z-blog安装文件
'=================================
<%@ CODEPAGE=65001 %>
<% Option Explicit %>
<% On Error Resume Next %>
<% Response.Charset="UTF-8" %>
<html>
<head>
<title>文件解包程序</title>
</head>
<body>
<textarea name="content" cols="90" rows="20" style="border:0px;overflow:auto;border-width:0px;width:100%;background-color:#E8F3FF;" scrolling="auto">
<%
 Dim strLocalPath
 '得到当前文件夹的物理路径
 strLocalPath=Left(Request.ServerVariables("PATH_TRANSLATED"),InStrRev(Request.ServerVariables("PATH_TRANSLATED"),"\"))

 Dim strDbPath
 Dim objXmlFile
 Dim objNodeList
 Dim objFSO
 Dim objStream
 Dim i,j

 Set objXmlFile = Server.CreateObject("Microsoft.XMLDOM")
 objXmlFile.load(Server.MapPath("data.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 & vbCrlf
   Response.Flush
  Next

  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 & vbCrlf
   Response.Flush
   .Close
   End With
   Set objStream = Nothing
  Next
 End If
End If
%>
</textarea>
<%response.write "<script>alert('文件解包完毕!');</script>"%>

================================================
不想COPY的,这里有源文件下载


================================================


--  作者:tloner
--  发布时间:11/24/2005 11:31:00 AM

--  
好东西,收藏了
--  作者:fangzi
--  发布时间:12/21/2005 9:30:00 AM

--  
好东西,收藏
--  作者:algorithm
--  发布时间:1/7/2006 4:32:00 PM

--  
COOL
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
70.313ms