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

你可能感兴趣的:(ASP在线打包 在线解压)