Komponen unggahan SWFUpload awalnya dikembangkan oleh Vinterwebb.se. Bagian utama komponen ini terintegrasi dengan Flash dan JavaScript. Komponen ini terutama didedikasikan untuk memecahkan masalah pengunggahan banyak file dan file besar untuk kemudahan panggilan oleh pengembang web Anda dapat dengan mudah mengontrol gaya dan mencapai efek unggahan yang diinginkan melalui js dan css. Tapi mungkin karena ASP secara bertahap menghilang dari pengembangan web, pejabat tersebut hanya menyediakan program pemrosesan unggahan untuk versi .net, php, dan lainnya. Untuk pengembang ASP, mereka perlu menangani sendiri penerimaan data di sisi server.
Ketika saya pertama kali mengenal komponen ini, saya tertarik dengan fungsinya yang kuat, fleksibilitas dan kenyamanan. Karena proyek ini dikembangkan menggunakan ASP pada saat itu, Baidu mengetahui setelah beberapa penelitian bahwa tidak ada program pemrosesan unggahan ASP yang berguna (sekarang). ada banyak^^), jadi sepertinya saya hanya bisa melakukannya sendiri. Penelitian dan pengembangan. Awalnya, metode pemrosesan unggahan biasa digunakan untuk mencegat data file data file yang diteruskan oleh komponen. , Saya tidak punya pilihan selain mulai menganalisis format data yang dikirimkannya. Melalui analisis, saya menemukan bahwa format data yang dikirimkannya masih agak berbeda dengan unggahan biasa. Baik gambar maupun file dikirim ke server dalam bentuk aliran oktet paham format datanya, selebihnya mencegat. Saya akan share cara pengolahannya kepada teman-teman yang membutuhkan.
Copy kode kodenya sebagai berikut:
<%
Kelas SWUpload
FormData pribadi, folderPath, streamGet
Ukuran file pribadi, chunkSize, bofCont, eofCont
INISIALISASI KELAS REM
Sub Kelas Pribadi_Inisialisasi
CallInitVariant
Server.ScriptTimeOut = 1800
Setel streamGet = Server.CreateObject(ADODB.Stream)
sPenulis = 51JS.COM-ZMM
sVersion = Unggah Kelas 1.0
Akhiri Sub
INISIALISASI KELAS REM
Properti Publik Biarkan SaveFolder (byVal sFolder)
Jika Benar(sFolder, 1) = / Lalu
folderPath = sFolder
Kalau tidak
folderPath = sFolder & /
Akhiri Jika
Properti Akhir
Properti Publik Dapatkan SaveFolder
SimpanFolder = jalur folder
Properti Akhir
Varian Init Fungsi Pribadi
Ukuran potongan = 1024 * 128
folderPath = / : Ukuran file = 1024 * 10
bofCont = StrToByte(aliran oktet & vbCrlf & vbCrlf)
eofCont = StrToByte(vbCrlf & String(12, -))
Fungsi Akhir
Fungsi Publik GetUploadData
Redupkan arusBaca : arusBaca = 0
Redupkan dataLen : dataLen = Permintaan.TotalBytes
streamGet.Type = 1 : streamGet.Buka
Lakukan Sementara saat iniBaca < dataLen
Redupkan partLen : partLen = chunkSize
Jika partLen + curRead > dataLen Kemudian partLen = dataLen - curRead
streamGet.Permintaan Tulis.BinaryRead(partLen)
curRead = curRead + bagianLen
Lingkaran
streamGet.Posisi = 0
formData = streamGet.Baca(dataLen)
Hubungi GetUploadFile
Fungsi Akhir
Fungsi Publik GetUploadFile
Redupkan begMark : begMark = StrToByte(nama file=)
Redupkan begPath : begPath = InStrB(1, formData, begMark & ChrB(34)) + 10
Redupkan endPath : endPath = InStrB(begPath, formData, ChrB(34))
Redupkan cntPath : cntPath = MidB(formData, begPath, endPath - begPath)
Redupkan cntName : cntName = folderPath & GetClientName(cntPath)
Redupkan begFile : begFile = InStrB(1, formData, bofCont) + 15
Redupkan endFile : endFile = InStrB(begFile, formData, eofCont)
Panggil SaveUploadFile(cntName, begFile, endFile - begFile)
Fungsi Akhir
Fungsi Publik SaveUploadFile (byVal fName, byVal bCont, byVal sLen)
Redupkan filePath : filePath = Server.MapPath(fName)
Jika CreateFolder(|, GetParentFolder(filePath)) Lalu
streamGet.Position = bCont
Setel streamPut = Server.CreateObject(ADODB.Stream)
streamPut.Type = 1 : streamPut.Mode = 3 : streamPut.Open
streamPut.Tulis streamGet.Baca(sLen)
streamPut.SaveToFile filePath, 2
streamPut.Close : Setel streamPut = Tidak Ada
Akhiri Jika
Fungsi Akhir
Fungsi Pribadi IsNothing(byVal sVar)
IsNothing = IsNull(sVar) Atau (sVar = Kosong)
Fungsi Akhir
Fungsi Pribadi StrToByte(byVal sText)
Untuk i = 1 Ke Len(sTeks)
StrToByte = StrToByte & ChrB(Asc(Mid(sText, i, 1)))
Berikutnya
Fungsi Akhir
Fungsi Pribadi ByteToStr(byVal sByte)
Redupkan aliranTmp
Setel streamTmp = Server.CreateObject(ADODB.Stream)
streamTmp.Jenis = 2
aliranTmp.Mode = 3
streamTmp.Buka
streamTmp.WriteText sByte
streamTmp.Posisi = 0
streamTmp.CharSet = utf-8
streamTmp.Posisi = 2
ByteToStr = streamTmp.ReadText
streamTmp.Tutup
Setel streamTmp = Tidak Ada
Fungsi Akhir
Fungsi Pribadi GetClientName(byVal bInfo)
Redupkan sInfo, regEx
sInfo = ByteToStr(bInfo)
Jika Tidak Ada (sInfo) Lalu
Dapatkan NamaKlien =
Kalau tidak
Setel regEx = RegExp Baru
regEx.Pattern = ^.*//([^//]+)$
regEx.Global = Salah
regEx.IgnoreCase = Benar
GetClientName = regEx.Ganti(sInfo, $1)
Setel regEx = Tidak Ada
Akhiri Jika
Fungsi Akhir
Fungsi Pribadi GetParentFolder(byVal sPath)
RegEx redup
Setel regEx = RegExp Baru
regEx.Pattern = ^(.*)//[^//]*$
regEx.Global = Benar
regEx.IgnoreCase = Benar
GetParentFolder = regEx.Replace(sPath, $1)
Setel regEx = Tidak Ada
Fungsi Akhir
Fungsi Pribadi CreateFolder (byVal sLine, byVal sPath)
fo
Setel oFso = Server.CreateObject(Scripting.FileSystemObject)
Jika Bukan oFso.FolderExists(sPath) Lalu
RegEx redup
Setel regEx = RegExp Baru
regEx.Pattern = ^(.*)//([^//]*)$
regEx.Global = Salah
regEx.IgnoreCase = Benar
sLine = sLine & regEx.Replace(sPath, $2) & |
sPath = regEx.Ganti(sPath, $1)
Jika CreateFolder(sLine, sPath) Maka CreateFolder = True
Setel regEx = Tidak Ada
Kalau tidak
Jika sGaris = |
BuatFolder = Benar
Kalau tidak
Redupkan sTemp : sTemp = Mid(sLine, 2, Len(sLine) - 2)
Jika InStrRev(sTemp, |) = 0 Maka
sGaris = |
sPath = sPath & / & sTemp
Kalau tidak
Redupkan Folder : Folder = Mid(sTemp, InStrRev(sTemp, |) + 1)
sLine = |. & Tengah(sTemp, 1, InStrRev(sTemp, |) - 1) & |
sPath = sPath & / & Folder
Akhiri Jika
oFso.CreateFolder sPath
Jika CreateFolder(sLine, sPath) Maka CreateFolder = True
Berakhir jika
Akhiri Jika
Tetapkan oFso = Tidak Ada
Fungsi Akhir
PENGHENTIAN KELAS REM
Sub Kelas Pribadi_Terminate
streamGet.Tutup
Setel streamGet = Tidak Ada
Akhiri Sub
Kelas Akhir
Metode panggilan REM
Redupkan Upload
Setel oUpload = SWFUpload Baru
oUpload.SaveFolder = jalur penyimpanan
oUnggah.DapatkanUnggahData
Setel oUpload = Tidak Ada
%>