تم تطوير مكون تحميل SWFUpload في الأصل بواسطة Vinterwebb.se، وتم دمج الجزء الرئيسي للمكون مع Flash وJavaScript، وهو مخصص بشكل أساسي لحل مشكلة تحميل الملفات المتعددة والملفات الكبيرة لسهولة الاتصال من قبل مطوري الويب، يمكنك التحكم بسهولة في النمط وتحقيق تأثير التحميل المطلوب من خلال js وcss. ولكن ربما مع اختفاء ASP تدريجيًا من تطوير الويب، يوفر المسؤول فقط برامج معالجة التحميل لـ .net وphp والإصدارات الأخرى. بالنسبة لمطوري ASP، يحتاجون إلى التعامل مع استقبال البيانات على جانب الخادم بأنفسهم.
عندما تعرفت على هذا المكون لأول مرة، انجذبت إلى وظائفه القوية ومرونته وراحته. وبما أن المشروع تم تطويره باستخدام ASP في ذلك الوقت، اكتشفت Baidu بعد بعض الأبحاث أنه لا يوجد برنامج مفيد لمعالجة تحميل ASP (الآن). هناك الكثير ^^)، لذلك يبدو أنني لا أستطيع القيام بذلك إلا بنفسي، في البداية، تم استخدام طريقة معالجة التحميلات العادية لاعتراض بيانات الملف بيانات الملف التي تم تمريرها بواسطة المكون. ، لم يكن لدي أي خيار سوى البدء في تحليل تنسيق البيانات الذي أرسله، ووجدت من خلال التحليل أن تنسيق البيانات الذي أرسله لا يزال مختلفًا إلى حد ما عن التحميلات العادية، حيث تم إرسال كل من الصور والملفات إلى الخادم في شكل تدفق ثماني لقد فهمت البيانات، والباقي هو الاعتراض، وسأشارك طريقة المعالجة الخاصة بي مع الأصدقاء الذين يحتاجون إليها.
انسخ رمز الكود كما يلي:
<%
فئة SWUpload
بيانات النموذج الخاص، مجلد المسار، ستريمجيت
حجم الملف الخاص، حجم القطعة، bofCont، eofCont
تهيئة فئة REM
فئة فرعية خاصة_تهيئة
CallInitVariant
Server.ScriptTimeOut = 1800
تعيينstreamGet = Server.CreateObject(ADODB.Stream)
المؤلف = 51JS.COM-ZMM
sVersion = تحميل الفئة 1.0
نهاية الفرعية
تهيئة فئة REM
الملكية العامة دع SaveFolder (byVal sFolder)
إذا كان Right(sFolder, 1) = / ثم
FolderPath = sFolder
آخر
FolderPath = sFolder & /
نهاية إذا
نهاية الملكية
الملكية العامة احصل على SaveFolder
SaveFolder = FolderPath
نهاية الملكية
وظيفة خاصة InitVariant
حجم القطعة=1024*128
مسار المجلد = / : حجم الملف = 1024 * 10
bofCont = StrToByte(octet-stream & vbCrlf & vbCrlf)
eofCont = StrToByte(vbCrlf & String(12, -))
وظيفة النهاية
الوظيفة العامة GetUploadData
خافت curRead : curRead = 0
خافت dataLen : dataLen = Request.TotalBytes
StreamGet.Type = 1: StreamGet.Open
افعل أثناء curRead <dataLen
خافت PartLen : PartLen = ChunkSize
إذا كان PartLen + curRead > dataLen ثم PartLen = dataLen - curRead
تيارGet.Write Request.BinaryRead(partLen)
curRead = curRead + PartLen
حلقة
ستريمجيت.بوسيشن = 0
formData = StreamGet.Read(dataLen)
اتصل بـ GetUploadFile
وظيفة النهاية
الوظيفة العامة GetUploadFile
خافت begMark : begMark = StrToByte (اسم الملف =)
ديم begPath : begPath = InStrB(1, formData, begMark & ChrB(34)) + 10
خافت endPath: endPath = InStrB(begPath,formData,ChrB(34))
Dim cntPath : cntPath = MidB(formData, begPath, endPath - begPath)
خافت cntName: cntName = FolderPath & GetClientName(cntPath)
خافت begFile : begFile = InStrB(1,formData,bofCont) + 15
خافت endFile: endFile = InStrB(begFile,formData,eofCont)
استدعاء SaveUploadFile (cntName، begFile، endFile - begFile)
وظيفة النهاية
الوظيفة العامة SaveUploadFile (byVal fName، byVal bCont، byVal sLen)
خافت filePath: filePath = Server.MapPath(fName)
إذا كان CreateFolder(|، GetParentFolder(filePath)) ثم
StreamGet.Position = bCont
تعيينstreamPut = Server.CreateObject(ADODB.Stream)
StreamPut.Type = 1 :streamPut.Mode = 3 :streamPut.Open
تيارPut.Write تيارGet.Read(sLen)
مسار الملف StreamPut.SaveToFile، 2
StreamPut.Close: تعيينstreamPut = لا شيء
نهاية إذا
وظيفة النهاية
الوظيفة الخاصة ليست شيئًا (byVal sVar)
IsNothing = IsNull(sVar) أو (sVar = فارغ)
وظيفة النهاية
وظيفة خاصة StrToByte (byVal sText)
لأني = 1 إلى لين (نص)
StrToByte = StrToByte & ChrB(Asc(Mid(sText, i, 1)))
التالي
وظيفة النهاية
الوظيفة الخاصة ByteToStr(byVal sByte)
تيار خافتTmp
تعيينstreamTmp = Server.CreateObject(ADODB.Stream)
تيارTmp.Type = 2
تيارTmp.Mode = 3
StreamTmp.Open
StreamTmp.WriteText sByte
تيارTmp.Position = 0
StreamTmp.CharSet = utf-8
تيارTmp.Position = 2
ByteToStr =streamTmp.ReadText
StreamTmp.Close
اضبط StreamTmp = لا شيء
وظيفة النهاية
الوظيفة الخاصة GetClientName(byVal bInfo)
معلومات خافتة، regEx
sInfo = ByteToStr(bInfo)
إذا لم يكن هناك شيء (sInfo) ثم
GetClientName =
آخر
قم بتعيين regEx = New RegExp
regEx.Pattern = ^.*//([^//]+)$
regEx.Global = خطأ
regEx.IgnoreCase = صحيح
GetClientName = regEx.Replace(sInfo, $1)
تعيين regEx = لا شيء
نهاية إذا
وظيفة النهاية
الوظيفة الخاصة GetParentFolder(byVal sPath)
خافت regEx
قم بتعيين regEx = New RegExp
regEx.Pattern = ^(.*)//[^//]*$
regEx.Global = صحيح
regEx.IgnoreCase = صحيح
GetParentFolder = regEx.Replace(sPath, $1)
تعيين regEx = لا شيء
وظيفة النهاية
وظيفة خاصة CreateFolder (byVal sLine، byVal sPath)
فو
تعيين oFso = Server.CreateObject(Scripting.FileSystemObject)
إذا لم يكن oFso.FolderExists(sPath) إذن
خافت regEx
قم بتعيين regEx = New RegExp
regEx.Pattern = ^(.*)//([^//]*)$
regEx.Global = خطأ
regEx.IgnoreCase = صحيح
sLine = sLine & regEx.Replace(sPath, $2) & |
sPath = regEx.Replace(sPath, $1)
إذا كان CreateFolder(sLine, sPath) ثم CreateFolder = True
تعيين regEx = لا شيء
آخر
إذا sLine = |
إنشاء مجلد = صحيح
آخر
Dim sTemp : sTemp = Mid(sLine, 2, Len(sLine) - 2)
إذا كان InStrRev(sTemp, |) = 0 إذن
س لاين = |
sPath = sPath & / & sTemp
آخر
المجلد الخافت: المجلد = Mid(sTemp, InStrRev(sTemp, |) + 1)
sLine = |. & Mid(sTemp, 1, InStrRev(sTemp, |) - 1) & |
sPath = sPath &/& Folder
نهاية إذا
oFso.CreateFolder sPath
إذا كان CreateFolder(sLine, sPath) ثم CreateFolder = True
انتهي إذا
نهاية إذا
تعيين oFso = لا شيء
وظيفة النهاية
إنهاء فئة REM
فئة فرعية خاصة_إنهاء
StreamGet.Close
تعيين StreamGet = لا شيء
نهاية الفرعية
نهاية الفصل
طريقة استدعاء REM
خافت التحميل
Set oUpload = New SWFUpload
oUpload.SaveFolder = مسار التخزين
oUpload.GetUploadData
تعيين oUpload = لا شيء
%>