example.asp
< %@LANGUAGE="VBSCRIPT " CODEPAGE="65001"%>
<!--#include file="SundyUpload.asp"-->
<%
'ترميز المستند في هذا المثال هو UTF-8 إذا كان نظام ترميز آخر، فيرجى تحويل الترميز إلى الترميز المقابل، وإلا فقد تكون البيانات التي تم الحصول عليها بواسطة النموذج مشوهة.
خافت objUpload، واختيار
DimxmlPath
خافت fileFormName،objFile،counter
اختيار = request.QueryString("opt")
إذا تختار = "تحميل" ثم
xmlPath = Server.MapPath(request.QueryString("xmlPath"))'تحويل المسار الظاهري إلى المسار الفعلي
Set objUpload=new SundyUpload "إنشاء كائن تحميل".
objUpload.UploadInit xmlPath،"utf-8"
العداد=1
Response.Write("نموذج عادي:" & objUpload.Form("normalForm") & "<BR><BR>")'الحصول على بيانات النموذج
لكل fileFormName في objUpload.objFile
تعيين objFile=objUpload.objFile(fileFormName)
حجم الملف = objFile.FileSize
strTemp=objFile.FilePath
الاستجابة.اكتب strTemp
اسم الملف = منتصف (strTemp، InStrRev (strTemp، "")+1)
إذا كان حجم الملف > 0 ثم
الاستجابة.الكتابة ("حجم الملف:" وحجم الملف و"<BR>")
Response.Write("اسم الملف:" & objFile.FilePath & "<BR>")
' Response.Write("وصف الملف:" & objUpload.Form("fileDesc" & counter) & "<BR><BR>")
objFile.SaveAs Server.MapPath(".") & "upload" واسم الملف
Response.اكتب "حفظ في: "&Server.MapPath(".") & "upload" & fileName & "<br><br>"
نهاية إذا
العداد = العداد + 1
التالي
نهاية إذا
'تحميل ملف بيانات شريط التقدم (حدد المسار الظاهري لملف XML)
"من الأفضل أن تكون عشوائيًا، لأن العديد من الأشخاص قد يقومون بالتحميل في نفس الوقت ويتطلبون بيانات تقدم مختلفة
"يجب تمرير هذا المسار إلى مكون التحميل عند الإرسال حتى يمكن تغيير بيانات التقدم أثناء عملية التحميل."
'يستخدم العميل Javascript لقراءة ملف XML هذا وعرض التقدم
xmlPath = "upload/" والمؤقت و".xml"
%>
<أتش تي أم أل>
<الرأس>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>مثال على شريط تقدم التحميل في Sundy</title>
<لغة البرمجة = "جافا سكريبت">
وظيفة chkFrm(){
فار objFrm = document.frmUpload;
إذا (objFrm.file1.value=="" && objFrm.file2.value==""){
تنبيه ("الرجاء تحديد ملف")؛
objFrm.file1.focus();
عودة كاذبة.
}
objFrm.action = "Example.asp?opt=Upload&xmlPath=<%=xmlPath%>";
startProgress('<%=xmlPath%>');// ابدأ شريط التقدم
عودة صحيحة؛
}
</script>
</الرأس>
<الجسم>
<form name = "frmUpload" أسلوب = "post" action = "Example.asp" enctype = "multipart/form-data" onSubmit = "return chkFrm ()">
النموذج العادي:<BR><input type="text" name="normalForm" size="40"><BR><BR>
الملف 1:<BR>
<نوع الإدخال = "ملف" اسم = "ملف 1" حجم = "40"></br>
<input type="text" name="fileDesc1" size="30"><BR><BR>
الملف 2:<BR>
<نوع الإدخال = "ملف" اسم = "ملف 2" حجم = "40"></br>
<نوع الإدخال = "نص" اسم = "fileDesc2" حجم = "30"> <BR>
الملف 3:<BR>
<نوع الإدخال = "ملف" اسم = "ملف 3" حجم = "40"></br>
الملف 4:<BR>
<نوع الإدخال = "ملف" اسم = "ملف 4" حجم = "40"></br>
الملف 5:<BR>
<نوع الإدخال = "ملف" اسم = "ملف 5" حجم = "40"></br>
<نوع الإدخال = "إرسال" الاسم = "btnSubmit" القيمة = "إرسال"/>
</النموذج>
</الجسم>
</html>
SundyUpload.asp
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<%
DimSundyUpload_SourceData
ClassSundyUpload
خافت objForm،objFile،الإصدار،objProgress
خافت xmlPath،CharsetEncoding
نموذج الوظيفة العامة (strForm)
strForm=lcase(strForm)
إذا لم يكن objForm.exists(strForm) إذن
النموذج = ""
آخر
النموذج = objForm (strForm)
نهاية إذا
للوظيفة النهائية
(strFile)
strFile = lcase (strFile)
إذا لم يكن objFile.exists (strFile) ثم
تعيين الملف = معلومات الملف الجديدة
آخر
تعيين الملف = objFile (strFile)
نهاية إذا
وظيفة النهاية
UploadInit العام الفرعي (progressXmlPath،charset)
Dim RequestData,sStart,Crlf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,theFile
خافت iFileSize،sFilePath،sFileType،sFormValue،sFileName
خافت iFindStart، iFindEnd
خافت iFormStart،iFormEnd،sFormName
الإصدار = "شريط تقدم عرض التحميل، الإصدار 1.0"
تعيين objForm=Server.CreateObject("Scripting.Dictionary")
تعيين objFile=Server.CreateObject("Scripting.Dictionary")
إذا كان Request.TotalBytes <1، فاخرج من Sub
تعيين tStream = Server.CreateObject("adodb.stream")
تعيين SundyUpload_SourceData = Server.CreateObject("adodb.stream")
SundyUpload_SourceData.Type = 1
SundyUpload_SourceData.Mode =3
SundyUpload_SourceData.Open
DimTotalBytes
خافت ChunkReadSize
خافت DataPart، PartSize
خافت objProgress
TotalBytes = Request.TotalBytes 'الحجم الإجمالي
ChunkReadSize = 64 * 1024 ' حجم القطعة 64 كيلو بايت
بايت القراءة = 0
xmlPath =progressXmlPath
CharsetEncoding = charset
إذا كان CharsetEncoding = "" إذن
ترميز الأحرف = "utf-8"
نهاية إذا
تعيين objProgress = التقدم الجديد
objProgress.ProgressInit(xmlPath)
objProgress.UpdateProgress إجمالي البايتات، 0
"قراءة كتلة الحلقة."
قم بذلك أثناء قراءة البايتات <إجمالي البايتات
"اقرأ في أجزاء
PartSize = ChunkReadSize
إذا كان PartSize + BytesRead > TotalBytes، فإن PartSize = TotalBytes - BytesRead
DataPart = Request.BinaryRead(PartSize)
BytesRead = BytesRead + PartSize
SundyUpload_SourceData.Write DataPart
objProgress.UpdateProgress إجمالي البايتات، بايتسريد
حلقة
'SundyUpload_SourceData.Write Request.BinaryRead(Request.TotalBytes)
SundyUpload_SourceData.Position=0
RequestData =SundyUpload_SourceData.Read
إيفورمستارت=1
iFormEnd = LenB(RequestData)
Crlf = chrB(13) & chrB(10)
sStart = MidB(RequestData,1, InStrB(iFormStart,RequestData,Crlf)-1)
iStart = LenB(sStart)
iFormStart=iFormStart+iStart+1
بينما (iFormStart + 10) <iFormEnd
iInfoEnd = InStrB(iFormStart,RequestData,Crlf & Crlf)+3
tStream.Type = 1
tStream.Mode =3
tStream.Open
SundyUpload_SourceData.Position = iFormStart
SundyUpload_SourceData.CopyTo tStream،iInfoEnd-iFormStart
tStream.Position = 0
tStream.Type = 2
tStream.Charset =CharsetEncoding
sInfo = tStream.ReadText
tStream.Close
"الحصول على اسم عنصر النموذج."
iFormStart = InStrB(iInfoEnd,RequestData,sStart)
iFindStart = InStr(22,sInfo,"name=""",1)+6
iFindEnd = InStr(iFindStart,sInfo،"""،1)
sFormName = lcase(Mid (sinfo,iFindStart,iFindEnd-iFindStart))
'إذا كان ملفًا
إذا كان InStr (45,sInfo،"filename = """، 1)> 0 ثم
اضبط theFile=new FileInfo
"احصل على اسم الملف
iFindStart = InStr(iFindEnd,sInfo،"filename = """،1)+10
iFindEnd = InStr(iFindStart,sInfo،"""،1)
sFileName = منتصف (sinfo،iFindStart،iFindEnd-iFindStart)
theFile.FileName=getFileName(sFileName)
theFile.FilePath=getFilePath(sFileName)
"الحصول على نوع الملف
iFindStart = InStr(iFindEnd,sInfo،"نوع المحتوى: "،1)+14
iFindEnd = InStr(iFindStart,sInfo,vbCr)
theFile.FileType =Mid (sinfo,iFindStart,iFindEnd-iFindStart)
theFile.FileStart =iInfoEnd
theFile.FileSize = iFormStart -iInfoEnd -3
theFile.FormName=sFormName
إذا لم يكن objFile.Exists(sFormName) إذن
objFile.add sFormName، theFile
نهاية إذا
آخر
'إذا كان عنصر نموذج
tStream.Type = 1
tStream.Mode =3
tStream.Open
SundyUpload_SourceData.Position = iInfoEnd
SundyUpload_SourceData.CopyTo tStream،iFormStart-iInfoEnd-3
tStream.Position = 0
tStream.Type = 2
tStream.Charset = CharsetEncoding
sFormValue = tStream.ReadText
tStream.Close
إذا كان objForm.Exists(sFormName) إذن
objForm(sFormName)=objForm(sFormName)&", "&sFormValue
آخر
objForm.Add sFormName,sFormValue
نهاية إذا
نهاية إذا
iFormStart=iFormStart+iStart+1
ويند
بيانات الطلب = ""
اضبط tStream = لا شيء
نهاية الفرعية
فئة فرعية خاصة_تهيئة
نهاية الفرعية
فئة فرعية خاصة_إنهاء
إذا Request.TotalBytes> 0 ثم
objForm.RemoveAll
objFile.RemoveAll
تعيين objForm = لا شيء
تعيين objFile = لا شيء
SundyUpload_SourceData.Close
اضبط SundyUpload_SourceData = لا شيء
نهاية إذا
تعيين objProgress = لا شيء
تعيين objFso = Server.CreateObject("Scripting.FileSystemObject")
إذا كان objFso.FileExists(xmlPath) إذن
objFso.DeleteFile(xmlPath)
نهاية إذا
تعيين objFso = لا شيء
نهاية الفرعية
وظيفة خاصة GetFilePath (FullPath)
إذا كان FullPath <> "" إذن
GetFilePath = left(FullPath,InStrRev(FullPath, ""))
آخر
GetFilePath = ""
نهاية إذا
وظيفة النهاية
الوظيفة الخاصة GetFileName(FullPath)
إذا كان FullPath <> "" إذن
GetFileName = mid(FullPath,InStrRev(FullPath, "")+1)
آخر
اسم الملف = ""
نهاية إذا
وظيفة النهاية
معلومات ملف
فئة النهاية
اسم النموذج الخافت، اسم الملف، FilePath، حجم الملف، نوع الملف، FileStart
فئة فرعية خاصة_تهيئة
اسم الملف = ""
مسار الملف = ""
حجم الملف=0
بداية الملف = 0
اسم النموذج = ""
نوع الملف = ""
نهاية الفرعية
الوظيفة العامة SaveAs(FullPath)
خافت الدكتور، ErrorChar، ط
حفظ باسم = صحيح
'الاستجابة.اكتب المسار الكامل و"................................<br>"
'اسم الملف = "ss.txt"
إذا كان القطع (fullpath) = "" أو FileStart = 0 أو fileName = "" أو اليمين (fullpath,1) = "/" ثم قم بالخروج من الوظيفة
'الرد.اكتب "2................................<br>"
تعيين dr=CreateObject("Adodb.Stream")
الوضع = 3
نوع الدكتور = 1
فتح
SundyUpload_SourceData.position=FileStart
SundyUpload_SourceData.copyto dr,FileSize
dr.SaveToFile FullPath،2
إغلاق
تعيين الدكتور = لا شيء
حفظ باسم=خطأ
وظيفة النهاية
نهاية
الفصل الدراسي
خافت objDom،xmlPath
وقت البدء الخافت
فرعية خاصة_ تهيئة
النهاية
الفرعية
التقدم الفرعي العام (xmlPathTmp)
خافت objRoot،objChild
Dim objPI
xmlPath = xmlPathTmp
تعيين objDom = Server.CreateObject("Microsoft.XMLDOM")
تعيين objRoot = objDom.createElement("progress")
objDom.appendChild objRoot
تعيين objChild = objDom.createElement("totalbytes")
objChild.Text = "0"
objRoot.appendChild objChild
تعيين objChild = objDom.createElement("uploadbytes")
objChild.Text = "0"
objRoot.appendChild objChild
تعيين objChild = objDom.createElement("uploadpercent")
objChild.Text = "0%"
objRoot.appendChild objChild
تعيين objChild = objDom.createElement("uploadspeed")
objChild.Text = "0"
objRoot.appendChild objChild
تعيين objChild = objDom.createElement("totaltime")
objChild.Text = "00:00:00"
objRoot.appendChild objChild
تعيين objChild = objDom.createElement("lefttime")
objChild.Text = "00:00:00"
objRoot.appendChild objChild
تعيين objPI = objDom.createProcessingInstruction("xml"، "version='1.0' encoding='utf-8'")
objDom.insertقبل objPI، objDom.childNodes(0)
objDom.Save xmlPath
تعيين objPI = لا شيء
تعيين objChild = لا شيء
تعيين objRoot = لا شيء
تعيين objDom = لا شيء
نهاية الفرعية
تقدم التحديث الفرعي (tBytes، rBytes)
الوقت الإلكتروني الخافت، الوقت الحالي، السرعة، الوقت الإجمالي، الوقت الأيسر، النسبة المئوية
إذا rBytes = 0 ثم
startTime = Timer
تعيين objDom = Server.CreateObject("Microsoft.XMLDOM")
objDom.load(xmlPath)
objDom.selectsinglenode("//totalbytes").text=tBytes
objDom.save(xmlPath)
آخر
السرعة = 0.0001
currentTime = Timer
eTime = الوقت الحالي - وقت البدء
إذا كان eTime>0 فإن السرعة = rBytes / eTime
TotalTime = tBytes/speed
leftTime = (تي بايت - rBytes) / السرعة
النسبة المئوية = Round(rBytes *100 / tBytes)
'objDom.selectsinglenode("//uploadbytes").text = rBytes
'objDom.selectsinglenode("//uploadspeed").text = speed
'objDom.selectsinglenode("//totaltime").text = TotalTime
'objDom.selectsinglenode("//lefttime").text = leftTime
objDom.selectsinglenode("//uploadbytes").text = FormatFileSize(rBytes) & "/" & FormatFileSize(tBytes)
objDom.selectsinglenode("//uploadpercent").text = بالمائة
objDom.selectsinglenode("//uploadspeed").text = FormatFileSize(speed) & "/sec"
objDom.selectsinglenode("//totaltime").text = SecToTime(totalTime)
objDom.selectsinglenode("//lefttime").text = SecToTime(leftTime)
objDom.save(xmlPath)
نهاية إذا
نهاية الوظيفة الخاصة الفرعية
SecToTime(sec)
ديم ح:ح = "0"
خافت م: م = "0"
خافت ق: ق = "0"
ح = الجولة (ثانية / 3600)
م = جولة (((ثانية وزارة الدفاع 3600) / 60)
s = جولة (ثانية وزارة الدفاع 60)
إذا LEN(h)=1 ثم h = "0" & h
إذا LEN(m)=1 ثم m = "0" & m
إذا كانت LEN(s)=1 ثم s = "0" & s
SecToTime = (h & quot;: & m & quot; & s)
وظيفة النهاية
وظيفة خاصة FormatFileSize(fsize)
راديو خافت،k،m،g،unitTMP
ك = 1024
م = 1024*1024
ز = 1024*1024*1024
الراديو = 1
إذا كان Fix(fsize / g) > 0.0 إذن
وحدةTMP = "جيجابايت"
راديو=ز
ElseIf Fix(fsize / m) > 0 ثم
وحدةTMP = "ميجابايت"
راديو = م
ElseIf Fix(fsize / k) > 0 ثم
وحدةTMP = "كيلو بايت"
راديو = ك
آخر
وحدة تمب = "ب"
الراديو = 1
نهاية إذا
إذا الراديو = 1 ثم
FormatFileSize = fsize & " " & UnitTMP
آخر
FormatFileSize = FormatNumber(fsize/radio,3) &unitTMP
نهاية إذا
وظيفة النهاية
Class_Sub الخاصة_Terminate
تعيين objDom = لا شيء
نهاية الفرعية
نهاية الفصل
"http://www.knowsky.com/"
%>
<لغة البرمجة = "جافا سكريبت">
// ابدأ شريط التقدم
الدالة startProgress(xmlPath){
DisplayProgress();
setProgressDivPos();
setTimeout("DisplayProgressBar('" + xmlPath + "')",500);
}
وظيفة DisplayProgressBar(xmlPath){
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
xmlDoc.async = false;
xmlDoc.load(xmlPath);
إذا (xmlDoc.parseError.errorCode!=0){
خطأ فار = xmlDoc.parseError؛
تنبيه (خطأ.السبب)
setTimeout("DisplayProgressBar('" + xmlPath + "')",1000);
يعود؛
}
var root = xmlDoc.documentElement;
فار إجمالي البايتات = root.childNodes(0).text;
var uploadbytes = root.childNodes(1).text;
فار في المئة = root.childNodes(2).text;
ProgressPercent.innerHTML = بالمائة + "%";
ProgressBar.style.width = بالمائة + "%";
uploadSize.innerHTML = uploadbytes;
uploadSpeed.innerHTML = root.childNodes(3).text;
TotalTime.innerHTML = root.childNodes(4).text;
leftTime.innerHTML = root.childNodes(5).text;
إذا (في المئة <100) {
setTimeout("DisplayProgressBar('" + xmlPath + "')",1000);
}
}
وظيفة عرض التقدم (){
var objProgress = document.getElementById("Progress");
objProgress.style.display = "";
}
وظيفة إغلاق التقدم () {
var objProgress = document.getElementById("Progress");
objProgress.style.display = "none";
}
دالة setProgressDivPos(){
var objProgress = document.getElementById("Progress");
objProgress.style.top = document.body.scrollTop+(document.body.clientHeight-document.getElementById("Progress").offsetHeight)/2
objProgress.style.left = document.body.scrollLeft+(document.body.clientWidth-document.getElementById("Progress").offsetWidth)/2;
}
</script>
<نمط النوع = "نص/CSS">
.تقدم {
الموقف: مطلق؛
الحشو: 4 بكسل؛
أعلى: 50؛
اليسار: 400؛
عائلة الخطوط: Verdana، Helvetica، Arial، sans-serif؛
حجم الخط: 12 بكسل؛
العرض: 250 بكسل؛
الارتفاع: 100 بكسل؛
الخلفية: #FFFFD1؛
اللون: #3D2C05؛
الحدود: 1 بكسل صلب #715208؛
/* ملكية موزيلا */
-moz-border-radius: 5px؛
/*-عتامة moz: 0.95;
}
.جدول التقدم،.التقدم TD{
حجم الخط: 9pt؛
}
.حاجِز{
العرض: 100%؛
الارتفاع: 15 بكسل؛
لون الخلفية:#CCCCCC;
الحدود: 1 بكسل داخلي #666666؛
الهامش السفلي: 4 بكسل؛
}
.التقدم بنسبة{
حجم الخط: 9pt؛
اللون: #000000؛
الارتفاع: 15 بكسل؛
الموقف: مطلق؛
مؤشر z: 20؛
العرض: 100%؛
محاذاة النص: مركز؛
}
.شريط التقدم{
لون الخلفية:#91D65C;
العرض: 1 بكسل؛
الارتفاع: 15 بكسل؛
}
</نمط>
<div id="التقدم" style="display:none;" class="progress">
<div class="bar">
<div id="ProgressPercent" class="ProgressPercent">0%</div>
<div id="ProgressBar" class="ProgressBar"></div>
</div>
<حدود الجدول = "0" تباعد الخلايا = "0" خلية الحشو = "2">
<تر>
<td>تم الرفع</td>
<td>:</td>
<td id="uploadSize"></td>
</tr>
<تر>
<td>سرعة التحميل</td>
<td>:</td>
<td id="uploadSpeed"> </td>
</tr>
<تر>
<td>إجمالي الوقت المطلوب</td>
<td>:</td>
<td id="totalTime"> </td>
</tr>
<تر>
<td>الوقت المتبقي</td>
<td>:</td>
<td id="leftTime"> </td>
</tr>
</الجدول>
</div>
http://blog.csdn.net/delinsql/archive/2006/12/29/1467430.aspx