ASP在线打包 在线解压

方式一(荐):

ZipAndUnZip.asp

<%

Sub AddToMdb(thePath)

On Error Resume Next

Dim Rs, Conn, Stream, ConnStr, adoCatalog, FsoX

Set FsoX = CreateObject("Scripting.FileSystemObject")

If FsoX.FileExists(Server.MapPath("HYTop.mdb")) Then

FsoX.DeleteFile(Server.MapPath("HYTop.mdb"))

End If

Set Rs = Server.CreateObject("Adodb.RecordSet")

Set Stream = Server.CreateObject("Adodb.Stream")

Set Conn = Server.CreateObject("Adodb.Connection")

Set adoCatalog = Server.CreateObject("ADOX.Catalog")

ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("HYTop.mdb")

adoCatalog.Create ConnStr

Conn.Open ConnStr

Conn.Execute("Create Table FileData(Id int IDENTITY(0,1) Primary Key Clustered, thePath VarChar, fileContent Image)")

Stream.Open

Stream.Type = 1

Rs.Open "FileData", Conn, 3, 3

fsoTreeForMdb thePath, Rs, Stream

Rs.Close

Conn.Close

Stream.Close

Set Rs = Nothing

Set Conn = Nothing

Set Stream = Nothing

Set adoCatalog = Nothing

End Sub

Sub fsoTreeForMdb(ThePath, Rs, Stream)

Dim Item, TheFolder, Folders , Files, SysFileList, FsoX

Set FsoX = Server.CreateObject("Scripting.FileSystemObject")

SysFileList = "$HYTop.mdb$HYTop.ldb$"

If FsoX.FolderExists(ThePath) = False Then

Response.write(ThePath + " 目录不存在或不允许访问!")

End If

Set TheFolder = FsoX.GetFolder(ThePath)

Set Files = TheFolder.Files

Set Folders = TheFolder.SubFolders

For Each Item In Folders

fsoTreeForMdb Item.Path, Rs, Stream

Next

For Each Item In Files

If InStr(SysFileList, "$" & Item.Name & "$") <= 0 Then

Rs.AddNew

Rs("thePath") = Mid(Item.Path, Len(Request("thePath")) + 1)

Stream.LoadFromFile(Item.Path)

Rs("fileContent") = Stream.Read()

Rs.Update

End If

Next

Set Files = Nothing

Set Folders = Nothing

Set TheFolder = Nothing

Set FsoX = Nothing

End Sub

Sub unPack(thePath)

On Error Resume Next

Server.ScriptTimeOut = 5000

Dim Rs, Ws, Str, Conn, Stream, ConnStr, theFolder, FsoX

Str = Server.MapPath(".") & "\"

Set FsoX = CreateObject("Scripting.FileSystemObject")

Set Rs = CreateObject("Adodb.RecordSet")

Set Stream = CreateObject("Adodb.Stream")

Set Conn = CreateObject("Adodb.Connection")

ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & thePath & ";"

Conn.Open ConnStr

Rs.Open "Select * from FileData", Conn, 1, 1

Stream.Open

Stream.Type = 1

Do Until Rs.Eof

TheFolder = Left(Rs("thePath"), InStrRev(Rs("thePath"), "\"))

If FsoX.FolderExists(Str & theFolder) = False Then

CreateFolder(Str & theFolder)

End If

Stream.SetEos()

Stream.Write Rs("fileContent")

Stream.SaveToFile Str & Rs("thePath") , 2

Rs.MoveNext

Loop

Rs.Close

Conn.Close

Stream.Close

Set Ws = Nothing

Set Rs = Nothing

Set Stream = Nothing

Set Conn = Nothing

Set FsoX = Nothing

End Sub

Sub CreateFolder(thePath)

Dim i, FsoX

Set FsoX = CreateObject("Scripting.FileSystemObject")

i = Instr(thePath, "\")

Do While i >0

If FsoX.FolderExists(Left(thePath, i)) = False Then

FsoX.CreateFolder(Left(thePath, i - 1))

End If

If InStr(Mid(thePath, i + 1), "\") Then

i = i + Instr(Mid(thePath, i + 1), "\")

Else

i = 0

End If

Loop

End Sub

If Trim(Request("Zip")) <> "" Then

AddToMdb(Request("thePath"))

Response.Write("压缩文件完毕! ")

Response.Write("下载压缩文件")

End If

If Trim(Request("UnZip")) <> "" Then

unPack(Request("theFile"))

Response.Write("解压完毕!")

End If

%>


.STYLE1 {color: #FF0000}

.STYLE2 {

color: #FFFFFF;

font-weight: bold;

font-size: 14px;

}

*{font-size:12px;}

-->





  "\" Then Response.Write(Server.MapPath(".\")) & "\" Else Response.Write(Server.MapPath(".\")) End If %>" size="60" />

方式二:

index.asp文件

<% Option Explicit %>


<%

Response.charset="gb2312"

Response.Buffer = True

Response.Clear

Dim Co,Temp,T,x,i,fsoBrowse,theFolder,TheSubFolders,FilePath,s,PH,objTar

Co=0

PH="../zip" '文件路径 '压缩父目录下zip目录的所有文件

Set objTar = New Tarball

objTar.TarFilename="打包.rar"   '打包的名称

objTar.Path=PH

set fsoBrowse=CreateObject("Scripting.FileSystemObject")

Set theFolder=fsoBrowse.GetFolder(Server.Mappath(PH))

Set theSubFolders=theFolder.SubFolders

GetFileList theFolder,""

If Co<1 Then

Response.Write "暂时没有可更新的文件下载"

'objTar.AddMemoryFile "Sorry.txt","Not File!"

Else

Temp=Left(Temp,Len(Temp)-1)

FilePath=Split(Temp,"|")

For s=0 To Ubound(FilePath)

objTar.AddFile Server.Mappath(PH & "/" & FilePath(s))

Next

If Response.IsClientConnected Then

objTar.WriteTar

Response.Flush

End If

End If

Set ObjTar = Nothing

Set fsoBrowse= Nothing

Set theFolder = Nothing

Set theSubFolders = Nothing

Sub GetFileList(Folderobject,path)

Dim y,m

For Each y in Folderobject.Files

If Path <>"" Then

Temp= Temp &   path & y.Name&"|"

Else

Temp= Temp & y.Name&"|"

End If

Co=Co+1

Next

Dim NewPath

For Each m In Folderobject.SubFolders

If path="" Then

NewPath=M.name &"/"

Else

NewPath=path & M.name &"/"

End If

GetFileList m,NewPath

Next

End Sub

%>

asptar.asp文件

<%

Class Tarball

Public TarFilename    ' Resultant tarball filename

Public UserID     ' UNIX user ID

Public UserName     ' UNIX user name

Public GroupID     ' UNIX group ID

Public GroupName    ' UNIX group name

Public Permissions    ' UNIX permissions

Public BlockSize    ' Block byte size for the tarball (default=512)

Public IgnorePaths    ' Ignore any supplied paths for the tarball output

Public BasePath     ' Insert a base path with each file

Public Path

' Storage for file information

Private objFiles,TmpFileName

Private objMemoryFiles

' File list management subs, very basic stuff

Public Sub AddFile(sFilename)

objFiles.Add sFilename,sFilename

End Sub

Public Sub RemoveFile(sFilename)

objFiles.Remove sFilename

End Sub

Public Sub AddMemoryFile(sFilename,sContents)

objMemoryFiles.Add sFilename,sContents

End Sub

Public Sub RemoveMemoryFile(sFilename)

objMemoryFiles.Remove sFilename

End Sub

Public Sub WriteTar()

Dim objStream, objInStream, lTemp, aFiles

Set objStream = Server.CreateObject("ADODB.Stream") ' The main stream

Set objInStream = Server.CreateObject("ADODB.Stream") ' The input stream for data

objStream.Type = 2

objStream.Charset = "x-ansi" ' Good old extended ASCII

objStream.Open

objInStream.Type = 2

objInStream.Charset = "x-ansi"

aFiles = objFiles.Items

For lTemp = 0 to UBound(aFiles)

objInStream.Open

objInStream.LoadFromFile aFiles(lTemp)

objInStream.Position = 0

TmpFileName =replace(aFiles(lTemp),Server.Mappath(Path)&"\","")

ExportFile TmpFileName,objStream,objInStream

objInStream.Close

Next

aFiles = objMemoryFiles.Keys

For lTemp = 0 to UBound(aFiles)

objInStream.Open

objInStream.WriteText objMemoryFiles.Item(aFiles(lTemp))

objInStream.Position = 0

ExportFile aFiles(lTemp),objStream,objInStream

objInStream.Close

Next

objStream.WriteText String(BlockSize,Chr(0))

objStream.Position = 0

objStream.Type = 1

objStream.savetofile Server.Mappath(Path) & "\" & TarFilename,2

objStream.Close

Set objStream = Nothing

Set objInStream = Nothing

End Sub

' Build a header for each file and send the file contents

Private Sub ExportFile(sFilename,objOutStream,objInStream)

Dim lStart, lSum, lTemp

lStart = objOutStream.Position ' Record where we are up to

If IgnorePaths Then

' We ignore any paths prefixed to our filenames

lTemp = InStrRev(sFilename,"\")

if lTemp <> 0 then

sFilename = Right(sFilename,Len(sFilename) - lTemp)

end if

sFilename = BasePath & sFilename

End If

' Build the header, everything is ASCII in octal except for the data

'objOutStream.charset="gb2312"

objOutStream.WriteText Left(sFilename & String(100,Chr(0)),100)

'objOutStream.charset="x-ansi"

objOutStream.WriteText "100" & Right("000" & Oct(Permissions),3) & " " & Chr(0) 'File mode

objOutStream.WriteText Right(String(6," ") & CStr(UserID),6) & " " & Chr(0) 'uid

objOutStream.WriteText Right(String(6," ") & CStr(GroupID),6) & " " & Chr(0) 'gid

objOutStream.WriteText Right(String(11,"0") & Oct(objInStream.Size),11) & Chr(0) 'size

objOutStream.WriteText Right(String(11,"0") & Oct(dateDiff("s","1/1/1970 10:00",now())),11) & Chr(0) 'mtime (Number of seconds since 10am on the 1st January 1970 (10am correct?)

objOutStream.WriteText "         0" & String(100,Chr(0)) 'chksum, type flag and link name, write out all blanks so that the actual checksum will get calculated correctly

objOutStream.WriteText "ustar   "   & Chr(0) 'magic and version

objOutStream.WriteText Left(UserName & String(32,Chr(0)),32) 'uname

objOutStream.WriteText Left(GroupName & String(32,Chr(0)),32) 'gname

objOutStream.WriteText "          40 " & String(4,Chr(0)) 'devmajor, devminor

objOutStream.WriteText String(167,Chr(0)) 'prefix and leader

objInStream.CopyTo objOutStream ' Send the data to the stream

if (objInStream.Size Mod BlockSize) > 0 then

objOutStream.WriteText String(BlockSize - (objInStream.Size Mod BlockSize),Chr(0)) 'Padding to the nearest block byte boundary

end if

' Calculate the checksum for the header

lSum = 0

objOutStream.Position = lStart

For lTemp = 1 To BlockSize

lSum = lSum + (Asc(objOutStream.ReadText(1)) And &HFF&)

Next

' Insert it

objOutStream.Position = lStart + 148

objOutStream.WriteText Right(String(7,"0") & Oct(lSum),7) & Chr(0)

' Move to the end of the stream

objOutStream.Position = objOutStream.Size

End Sub

' Start everything off

Private Sub Class_Initialize()

Set objFiles = Server.CreateObject("Scripting.Dictionary")

Set objMemoryFiles = Server.CreateObject("Scripting.Dictionary")

BlockSize = 512

Permissions = 438 ' UNIX 666

UserID = 0

UserName = "root"

GroupID = 0

GroupName = "root"

IgnorePaths = False

BasePath = ""

TarFilename = "new.tar"

End Sub

Private Sub Class_Terminate()

Set objMemoryFiles = Nothing

Set objFiles = Nothing

End Sub

End Class

%>

#Asp

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容