手机
当前位置:查字典教程网 >编程开发 >ASP教程 >不用WinRar只有asp将网络空间上的文件打包下载
不用WinRar只有asp将网络空间上的文件打包下载
摘要:asptar.asp0thenobjOutStream.WriteTextString(BlockSize-(objInStream.Siz...

<%@Language=VBScript%>

<%OptionExplicit%>

<>

<%

Response.Buffer=True

Response.Clear

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

Co=0

PH="./UpFile"'文件路径'压缩Upfile下的所有文件

SetobjTar=NewTarball

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

objTar.Path=PH

setfsoBrowse=CreateObject("Scripting.FileSystemObject")

SettheFolder=fsoBrowse.GetFolder(Server.Mappath(PH))

SettheSubFolders=theFolder.SubFolders

ForEachTintheFolder.Files

Temp=Temp&T.Name&"|"

Co=Co+1

Next

ForEachxIntheSubFolders

ForEachiInX.Files

Temp=Temp&X.Name&"/"&i.Name&"|"

Co=Co+1

Next

Next

IfCo<1Then

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

'objTar.AddMemoryFile"Sorry.txt","NotFile!"

Else

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

FilePath=Split(Temp,"|")

Fors=0ToUbound(FilePath)

objTar.AddFileServer.Mappath(PH&"/"&FilePath(s))

Next

IfResponse.IsClientConnectedThen

objTar.WriteTar

Response.Flush

EndIf

EndIf

SetObjTar=Nothing

SetfsoBrowse=Nothing

SettheFolder=Nothing

SettheSubFolders=Nothing

%>

asptar.asp

<%

'UNIXTarballcreator

'====================

'Author:ChrisRead

'Version:1.0.1

'====================

'

'Thisclassprovidestheabilitytoarchivemultiplefilestogetherintoasingle

'distributablefilecalledatarball(TheTARactuallystandsforTapeARchive).

'ThesearecommonUNIXfileswhichcontainuncompresseddata.

'

'Sowhatisthisusefulfor?Well,itallowsyoutoeffectivelycombinemultiple

'filesintoasinglefilefordownloading.TheTARfilesarereadableandextractable

'byawidevarietyoftools,includingtheverywidelydistributedWinZip.

'

'Thisscriptcanincludetwotypesofdataineacharchive,filedatareadfromadisk,

'andalsothingsdirectfrommemory,likefromastring.Thearchivessupportfilesin

'abinarystructure,soyoucanstoreexecutablefilesifyouneedto,orjuststore

'text.

'

'Thisclasswasdevelopedtoassistmewithafewprojectsandhasgrownwithevery

'implementation.CurrentlyIusethisclasstotarballXMLdataforarchivalpurposes

'whichallowsmetograb100'sofdynamicallycreatedXMLfilesinasingledownload.

'

'Thereareasmallnumberofpropertiesandmethods,whichareoutlinedinthe

'accompanyingdocumentation.

'

ClassTarball

PublicTarFilename'Resultanttarballfilename

PublicUserID'UNIXuserID

PublicUserName'UNIXusername

PublicGroupID'UNIXgroupID

PublicGroupName'UNIXgroupname

PublicPermissions'UNIXpermissions

PublicBlockSize'Blockbytesizeforthetarball(default=512)

PublicIgnorePaths'Ignoreanysuppliedpathsforthetarballoutput

PublicBasePath'Insertabasepathwitheachfile

PublicPath

'Storageforfileinformation

PrivateobjFiles,TmpFileName

PrivateobjMemoryFiles

'Filelistmanagementsubs,verybasicstuff

PublicSubAddFile(sFilename)

objFiles.AddsFilename,sFilename

EndSub

PublicSubRemoveFile(sFilename)

objFiles.RemovesFilename

EndSub

PublicSubAddMemoryFile(sFilename,sContents)

objMemoryFiles.AddsFilename,sContents

EndSub

PublicSubRemoveMemoryFile(sFilename)

objMemoryFiles.RemovesFilename

EndSub

'Sendthetarballtothebrowser

PublicSubWriteTar()

DimobjStream,objInStream,lTemp,aFiles

SetobjStream=Server.CreateObject("ADODB.Stream")'Themainstream

SetobjInStream=Server.CreateObject("ADODB.Stream")'Theinputstreamfordata

objStream.Type=2

objStream.Charset="x-ansi"'GoodoldextendedASCII

objStream.Open

objInStream.Type=2

objInStream.Charset="x-ansi"

'Gothroughallfilesstoredondiskfirst

aFiles=objFiles.Items

ForlTemp=0toUBound(aFiles)

objInStream.Open

objInStream.LoadFromFileaFiles(lTemp)

objInStream.Position=0

'ExportFileaFiles(lTemp),objStream,objInStream

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

ExportFileTmpFileName,objStream,objInStream

objInStream.Close

Next

'Nowaddstufffrommemory

aFiles=objMemoryFiles.Keys

ForlTemp=0toUBound(aFiles)

objInStream.Open

objInStream.WriteTextobjMemoryFiles.Item(aFiles(lTemp))

objInStream.Position=0

ExportFileaFiles(lTemp),objStream,objInStream

objInStream.Close

Next

objStream.WriteTextString(BlockSize,Chr(0))

'Rewindthestream

'Remembertochangethetypebacktobinary,otherwisethewritewilltruncate

'pastthefirstzerobytecharacter.

objStream.Position=0

objStream.Type=1

'Setallthebrowserstuff

Response.AddHeader"Content-Disposition","filename="&TarFilename

Response.ContentType="application/x-tar"

Response.BinaryWriteobjStream.Read

'Closeitandgohome

objStream.Close

SetobjStream=Nothing

SetobjInStream=Nothing

EndSub

'Buildaheaderforeachfileandsendthefilecontents

PrivateSubExportFile(sFilename,objOutStream,objInStream)

DimlStart,lSum,lTemp

lStart=objOutStream.Position'Recordwhereweareupto

IfIgnorePathsThen

'Weignoreanypathsprefixedtoourfilenames

lTemp=InStrRev(sFilename,"")

iflTemp<>0then

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

endif

sFilename=BasePath&sFilename

EndIf

'Buildtheheader,everythingisASCIIinoctalexceptforthedata

objOutStream.WriteTextLeft(sFilename&String(100,Chr(0)),100)

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

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

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

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

objOutStream.WriteTextRight(String(11,"0")&Oct(dateDiff("s","1/1/197010:00",now())),11)&Chr(0)'mtime(Numberofsecondssince10amonthe1stJanuary1970(10amcorrect?)

objOutStream.WriteText"0"&String(100,Chr(0))'chksum,typeflagandlinkname,writeoutallblankssothattheactualchecksumwillgetcalculatedcorrectly

objOutStream.WriteText"ustar"&Chr(0)'magicandversion

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

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

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

objOutStream.WriteTextString(167,Chr(0))'prefixandleader

objInStream.CopyToobjOutStream'Sendthedatatothestream

if(objInStream.SizeModBlockSize)>0then

objOutStream.WriteTextString(BlockSize-(objInStream.SizeModBlockSize),Chr(0))'Paddingtothenearestblockbyteboundary

endif

'Calculatethechecksumfortheheader

lSum=0

objOutStream.Position=lStart

ForlTemp=1ToBlockSize

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

Next

'Insertit

objOutStream.Position=lStart+148

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

'Movetotheendofthestream

objOutStream.Position=objOutStream.Size

EndSub

'Starteverythingoff

PrivateSubClass_Initialize()

SetobjFiles=Server.CreateObject("Scripting.Dictionary")

SetobjMemoryFiles=Server.CreateObject("Scripting.Dictionary")

BlockSize=512

Permissions=438'UNIX666

UserID=0

UserName="root"

GroupID=0

GroupName="root"

IgnorePaths=False

BasePath=""

TarFilename="new.tar"

EndSub

PrivateSubClass_Terminate()

SetobjMemoryFiles=Nothing

SetobjFiles=Nothing

EndSub

EndClass

%>

【不用WinRar只有asp将网络空间上的文件打包下载】相关文章:

ASP利用adodb.stream下载文件但不打开的方法

用asp实现检测文件编码

如何使用FSO搜索硬盘文件

用asp实现批量删除bak文件

三种禁用FileSystemObject组件的方法

用ASP读取/写入UTF-8编码格式的文件

ASP程序给上传的图片增添水印效果!

使用ASP中的VB ActiveX.dll文件

用asp实现文件浏览、上传、下载的程序

asp 中常用的文件处理函数

精品推荐
分类导航