Kode asp yang sangat bagus. Metode ini tidak disarankan untuk kompresi. Untuk file besar, mudah untuk mengompres beberapa file kecil.
<%@ Bahasa=VBScript %>
<% Opsi Eksplisit %>
<!--#sertakan file=asptar.asp-->
<%
Respon.Buffer = Benar
Respon. Jelas
Redupkan Co,Temp,T,x,i,fsoBrowse,Folder,TheSubFolders,FilePath,s,PH,objTar
Co=0
PH=./UpFile 'File path' mengkompres semua file di bawah Upfile
Setel objTar = Tarball Baru
objTar.TarFilename=LvBBS_UpdateFile.rar 'Nama kemasan
objTar.Jalur=PH
set fsoBrowse=CreateObject(Scripting.FileSystemObject)
Setel theFolder=fsoBrowse.GetFolder(Server.Mappath(PH))
Atur SubFolders=theFolder.SubFolders
Untuk Setiap T diFolder.Files
Temp= Temp & T.Nama & |
Co=Co+1
Berikutnya
Untuk Setiap x Di SubFolder
Untuk Setiap i Di X.Files
Suhu= Suhu & X.Nama&/&i.Nama&|
Co=Co+1
Berikutnya
Berikutnya
Jika Co<1 Maka
Response.Write Saat ini tidak ada file yang dapat diperbarui untuk diunduh.
'objTar.AddMemoryFile Maaf.txt, Bukan File!
Kalau tidak
Temp=Kiri(Temp,Len(Temp)-1)
FilePath=Pisahkan(Temp,|)
Untuk s=0 Ke Ubound(FilePath)
objTar.AddFile Server.Mappath(PH&/&FilePath(s))
Berikutnya
Jika Response.IsClientConnected Lalu
objTar.WriteTar
Respon. Siram
Akhiri Jika
Akhiri Jika
Tetapkan ObjTar = Tidak Ada
Setel fsoBrowse= Tidak ada
Setel Folder = Tidak Ada
Setel SubFolder = Tidak Ada
%>
asptar.asp
<%
' Pencipta UNIX Tarball
' =====
' Penulis: Chris Baca
' Versi: 1.0.1
' =====
'
' Kelas ini menyediakan kemampuan untuk mengarsipkan beberapa file menjadi satu
' file yang dapat didistribusikan disebut tarball (TAR sebenarnya adalah singkatan dari Tape ARchive).
' Ini adalah file UNIX umum yang berisi data yang tidak terkompresi.
'
' Jadi apa gunanya ini? Ya, ini memungkinkan Anda menggabungkan banyak hal secara efektif
' file menjadi satu file untuk diunduh. File TAR dapat dibaca dan diekstraksi
' oleh berbagai macam alat, termasuk WinZip yang didistribusikan secara luas.
'
' Skrip ini dapat menyertakan dua jenis data di setiap arsip, data file yang dibaca dari disk,
' dan juga hal-hal langsung dari memori, seperti dari string. Arsip mendukung file di dalamnya
' struktur biner, sehingga Anda dapat menyimpan file yang dapat dieksekusi jika perlu, atau hanya menyimpannya
' teks.
'
' Kelas ini dikembangkan untuk membantu saya dengan beberapa proyek dan telah berkembang seiring berjalannya waktu
' Implementasi saat ini saya menggunakan kelas ini untuk melakukan tarball data XML untuk tujuan pengarsipan
' yang memungkinkan saya mengambil 100 file XML yang dibuat secara dinamis dalam satu unduhan.
'
' Ada sejumlah kecil properti dan metode, yang diuraikan dalam
' dokumentasi yang menyertainya.
'
Kelas Tarball
Nama File Tar Publik ' Nama file tarball yang dihasilkan
ID Pengguna Publik ' ID pengguna UNIX
Nama Pengguna Publik ' Nama pengguna UNIX
ID Grup Publik ' ID grup UNIX
Nama Grup Publik ' Nama grup UNIX
Izin Publik ' Izin UNIX
Public BlockSize ' Ukuran byte blok untuk tarball (default=512)
Public IgnorePaths ' Abaikan jalur apa pun yang disediakan untuk keluaran tarball
Public BasePath ' Sisipkan jalur dasar dengan setiap file
Jalur Umum
'Penyimpanan untuk informasi file
ObjFiles pribadi, TmpFileName
ObjMemoryFiles pribadi
'Sub manajemen daftar file, hal yang sangat mendasar
Sub File Tambahan Publik (sFilename)
objFiles.Tambahkan sFilename,sFilename
Akhiri Sub
Sub Publik Hapus File (sFilename)
objFiles.Hapus sFilename
Akhiri Sub
Sub Publik AddMemoryFile (sFilename, sContents)
objMemoryFiles.Tambahkan sFilename,sContents
Akhiri Sub
Sub Publik HapusMemoryFile (sFilename)
objMemoryFiles.Hapus sFilename
Akhiri Sub
' Kirim tarball ke browser
Sub Publik WriteTar()
Redupkan objStream, objInStream, lTemp, aFiles
Setel objStream = Server.CreateObject(ADODB.Stream) ' Aliran utama
Setel objInStream = Server.CreateObject(ADODB.Stream) ' Aliran input untuk data
objStream.Jenis = 2
objStream.Charset = x-ansi ' ASCII lama yang bagus
objStream.Buka
objInStream.Jenis = 2
objInStream.Charset = x-ansi
' Periksa semua file yang disimpan di disk terlebih dahulu
aFiles = objFiles.Item
Untuk lTemp = 0 hingga UBound(aFiles)
objInStream.Buka
objInStream.LoadFromFile aFiles(lTemp)
objInStream.Posisi = 0
'EksporFile aFiles(lTemp),objStream,objInStream
TmpFileName = ganti(aFiles(lTemp),Server.Mappath(Path)&/,)
EksporFile TmpFileName,objStream,objInStream
objInStream.Tutup
Berikutnya
'Sekarang tambahkan sesuatu dari memori
aFiles = objMemoryFiles.Kunci
Untuk lTemp = 0 hingga UBound(aFiles)
objInStream.Buka
objInStream.WriteText objMemoryFiles.Item(aFiles(lTemp))
objInStream.Posisi = 0
EksporFile aFiles(lTemp),objStream,objInStream
objInStream.Tutup
Berikutnya
objStream.WriteText String(Ukuran Blok,Chr(0))
'Putar ulang alirannya
' Ingatlah untuk mengubah tipe kembali ke biner, jika tidak, penulisan akan terpotong
' melewati karakter nol byte pertama.
objStream.Posisi = 0
objStream.Jenis = 1
' Atur semua hal browser
Response.AddHeader Content-Disposition,filename= & TarFilename
Response.ContentType = aplikasi/x-tar
Respon.BinaryWrite objStream.Baca
' Tutup dan pulanglah
objStream.Tutup
Setel objStream = Tidak Ada
Setel objInStream = Tidak Ada
Akhiri Sub
' Buat header untuk setiap file dan kirimkan konten file
Sub File Ekspor Pribadi (sFilename, objOutStream, objInStream)
Redupkan lMulai, lJumlah, lTemp
lStart = objOutStream.Position ' Catat apa yang sedang kita lakukan
Jika IgnorePaths Lalu
' Kami mengabaikan jalur apa pun yang diawali dengan nama file kami
lTemp = InStrRev(sNama File,/)
jika lTemp <> 0 maka
sFilename = Kanan(sFilename,Len(sFilename) - lTemp)
berakhir jika
sFilename = BasePath & sFilename
Akhiri Jika
' Bangun headernya, semuanya ASCII dalam oktal kecuali datanya
objOutStream.WriteText Kiri(sNama File & String(100,Chr(0)),100)
objOutStream.WriteText 100 & Kanan(000 & Okt(Izin),3) & & Chr(0) 'Mode file
objOutStream.WriteText Kanan(String(6, ) & CStr(UserID),6) & & Chr(0) 'uid
objOutStream.WriteText Kanan(String(6, ) & CStr(GroupID),6) & & Chr(0) 'gid
objOutStream.WriteText Kanan(String(11,0) & Okt(objInStream.Size),11) & Chr(0) 'ukuran
objOutStream.WriteText Right(String(11,0) & Oct(dateDiff(s,1/1/1970 10:00,now())),11) & Chr(0) 'mtime (Jumlah detik sejak jam 10 pagi di 1 Januari 1970 (jam 10 pagi benar?)
objOutStream.WriteText 0 & String(100,Chr(0)) 'chksum, ketik flag dan nama link, tulis semua bagian yang kosong sehingga checksum sebenarnya dapat dihitung dengan benar
objOutStream.WriteText ustar & Chr(0) 'sihir dan versi
objOutStream.WriteText Kiri(Nama Pengguna & String(32,Chr(0)),32) 'uname
objOutStream.WriteText Kiri(Nama Grup & String(32,Chr(0)),32) 'gname
objOutStream.WriteText 40 & String(4,Chr(0)) 'devmajor, devminor
objOutStream.WriteText String(167,Chr(0)) 'awalan dan pemimpin
objInStream.CopyTo objOutStream ' Kirim data ke aliran
jika (objInStream.Size Mod BlockSize) > 0 lalu
objOutStream.WriteText String(BlockSize - (objInStream.Size Mod BlockSize),Chr(0)) 'Mengisi ke batas byte blok terdekat
berakhir jika
' Hitung checksum untuk header
lJumlah = 0
objOutStream.Position = lMulai
Untuk lTemp = 1 Ke BlockSize
lJumlah = lJumlah + (Asc(objOutStream.ReadText(1)) Dan &HFF&)
Berikutnya
'Masukkan
objOutStream.Posisi = lMulai + 148
objOutStream.WriteText Kanan(String(7,0) & Okt(lJumlah),7) & Chr(0)
' Pindah ke ujung aliran
objOutStream.Posisi = objOutStream.Ukuran
Akhiri Sub
'Mulailah semuanya
Sub Kelas Pribadi_Inisialisasi()
Setel objFiles = Server.CreateObject(Scripting.Dictionary)
Setel objMemoryFiles = Server.CreateObject(Scripting.Dictionary)
Ukuran Blok = 512
Izin = 438' UNIX 666
ID Pengguna = 0
Nama Pengguna = root
ID Grup = 0
Nama Grup = root
IgnorePaths = Salah
Jalur Dasar =
TarFilename = baru.tar
Akhiri Sub
Sub Kelas_Terminate() Pribadi
Setel objMemoryFiles = Tidak Ada
Setel objFiles = Tidak Ada
Akhiri Sub
Kelas Akhir
%>