Example.asp
< %@LANGUAGE="VBSCRIPT " CODEPAGE="65001"%>
<!--#include file="SundyUpload.asp"-->
-
'การเข้ารหัสเอกสารของตัวอย่างนี้คือ UTF-8 หากเป็นระบบการเข้ารหัสอื่น โปรดแปลงการเข้ารหัสเป็นการเข้ารหัสที่เกี่ยวข้อง มิฉะนั้นข้อมูลที่ได้รับจากแบบฟอร์มอาจอ่านไม่ออก
Dim objUpload เลือก
DimxmlPath
ไฟล์ DimFormName,objFile,ตัวนับ
เลือก = request.QueryString("เลือก")
ถ้า opt = "อัปโหลด" จากนั้น
xmlPath = Server.MapPath(request.QueryString("xmlPath"))'แปลงเส้นทางเสมือนเป็นเส้นทางจริง
ตั้งค่า objUpload=new SundyUpload 'สร้างวัตถุอัพโหลด'
objUpload.UploadInit xmlPath, "utf-8"
เคาน์เตอร์=1
Response.Write("รูปแบบปกติ:" & objUpload.Form("normalForm") & "<BR><BR>")'รับข้อมูลแบบฟอร์ม
สำหรับแต่ละ fileFormName ใน objUpload.objFile
ตั้งค่า objFile=objUpload.objFile(fileFormName)
fileSize = objFile.FileSize
strTemp= objFile.FilePath
การตอบสนองเขียน strTemp
ชื่อไฟล์ = mid(strTemp,InStrRev(strTemp, "")+1)
ถ้า fileSize > 0 แล้ว
Response.Write("ขนาดไฟล์:" & ขนาดไฟล์ & "<BR>")
Response.Write("ชื่อไฟล์:" & objFile.FilePath & "<BR>")
' Response.Write("คำอธิบายไฟล์:" & objUpload.Form("fileDesc" & counter) & "<BR><BR>")
objFile.SaveAs Server.MapPath(".") & "upload" & ชื่อไฟล์
Response.Write "บันทึกที่: "&Server.MapPath(".") & "upload" & fileName & "<br><br>"
สิ้นสุดถ้า
ตัวนับ = ตัวนับ + 1
ต่อไป
สิ้นสุดถ้า
'อัปโหลดไฟล์ข้อมูลแถบความคืบหน้า (ระบุเส้นทางเสมือนสำหรับไฟล์ XML)
'วิธีที่ดีที่สุดคือสุ่ม เนื่องจากหลายคนอาจอัปโหลดพร้อมกันและต้องการข้อมูลความคืบหน้าที่แตกต่างกัน
'เส้นทางนี้จะต้องถูกส่งผ่านไปยังองค์ประกอบการอัปโหลดเมื่อส่ง เพื่อให้สามารถเปลี่ยนแปลงข้อมูลความคืบหน้าในระหว่างกระบวนการอัปโหลด
'ไคลเอนต์ใช้ Javascript เพื่ออ่านไฟล์ XML นี้และแสดงความคืบหน้า
xmlPath = "อัปโหลด/" & ตัวจับเวลา & ".xml"
-
<html>
<หัว>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ตัวอย่างแถบความคืบหน้าการอัปโหลด Sundy</title>
<ภาษาสคริปต์ = "จาวาสคริปต์">
ฟังก์ชั่น chkFrm(){
var objFrm = document.frmUpload;
ถ้า (objFrm.file1.value=="" && objFrm.file2.value==""){
alert("กรุณาเลือกไฟล์");
objFrm.file1.focus();
กลับเท็จ;
-
objFrm.action = "Example.asp?opt=Upload&xmlPath=<%=xmlPath%>";
startProgress('<%=xmlPath%>');//เริ่มแถบความคืบหน้า
กลับเป็นจริง;
-
</สคริปต์>
</หัว>
<ร่างกาย>
<form name="frmUpload" method="post" action="Example.asp" enctype="multipart/form-data" onSubmit="return chkFrm()">
รูปแบบปกติ:<BR><input type="text" name="normalForm" size="40"><BR><BR>
ไฟล์ 1:<BR>
<input type="file" name="file1" size="40"></br>
<input type="text" name="fileDesc1" size="30"><BR><BR>
ไฟล์ 2:<BR>
<input type="file" name="file2" size="40"></br>
<input type="text" name="fileDesc2" size="30"><BR>
ไฟล์ 3:<BR>
<input type="file" name="file3" size="40"></br>
ไฟล์ 4:<BR>
<input type="file" name="file4" size="40"></br>
ไฟล์ 5:<BR>
<input type="file" name="file5" size="40"></br>
<ประเภทอินพุต = "ส่ง" name = "btnSubmit" value = "ส่ง"/>
</แบบฟอร์ม>
</ร่างกาย>
</html>
SundyUpload.asp
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
DimSundyUpload_SourceData
คลาสซันดี้อัปโหลด
หรี่ objForm, objFile, เวอร์ชัน, objProgress
Dim xmlPath, การเข้ารหัสอักขระ
แบบฟอร์มงานราชการ(strForm)
strForm=lcase(strForm)
ถ้าไม่ใช่ objForm.exists(strForm) ดังนั้น
แบบฟอร์ม = ""
อื่น
แบบฟอร์ม=objForm(strForm)
สิ้นสุดถ้า
ไฟล์ฟังก์ชันสาธารณะ
ของฟังก์ชันสิ้นสุด
(strFile)
strFile=lcase(strFile)
หากไม่ใช่ objFile.exists(strFile) จากนั้น
ตั้งค่าไฟล์ = FileInfo ใหม่
อื่น
ตั้งค่าไฟล์=objFile(strFile)
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
การอัพโหลดย่อยสาธารณะ (progressXmlPath, ชุดอักขระ)
Dim RequestData, sStart, Crlf, sInfo, iInfoStart, iInfoEnd, tStream, iStart, theFile
หรี่ iFileSize, sFilePath, sFileType, sFormValue, sFileName
หรี่ iFindStart, iFindEnd
หรี่ iFormStart, iFormEnd, sFormName
Version="แถบความคืบหน้าในการอัปโหลดเวอร์ชัน 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.เปิด
DimTotalBytes
Dim ChunkReadSize
Dim DataPart, PartSize
ติ่ม objProgress
TotalBytes = Request.TotalBytes 'ขนาดรวม'
ChunkReadSize = 64 * 1024 ' ขนาดก้อน 64K
ไบต์อ่าน = 0
xmlPath = ความคืบหน้า XmlPath
CharsetEncoding = ชุดอักขระ
ถ้า CharsetEncoding = "" แล้ว
การเข้ารหัสอักขระ = "utf-8"
สิ้นสุดถ้า
ตั้ง objProgress = ความคืบหน้าใหม่
objProgress.ProgressInit (xmlPath)
objProgress.UpdateProgress จำนวนไบต์,0
'การอ่านบล็อกแบบวนซ้ำ
ทำในขณะที่ BytesRead < TotalBytes
'อ่านเป็นชิ้นๆ.
PartSize = ChunkReadSize
ถ้า PartSize + BytesRead > TotalBytes ดังนั้น PartSize = TotalBytes - BytesRead
DataPart = Request.BinaryRead (ขนาดชิ้นส่วน)
BytesRead = BytesRead + PartSize
SundyUpload_SourceData.Write DataPart
objProgress.UpdateProgress จำนวนไบต์, BytesRead
วนซ้ำ
'SundyUpload_SourceData.เขียนคำขอ.BinaryRead (คำขอ.TotalBytes)
SundyUpload_SourceData.Position=0
RequestData =SundyUpload_SourceData.Read
iFormStart=1
iFormEnd = LenB (ข้อมูลคำขอ)
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.เปิด
SundyUpload_SourceData.Position = iFormStart
SundyUpload_SourceData.CopyTo tStream, iInfoEnd-iFormStart
tStream.ตำแหน่ง = 0
tStream.Type = 2
tStream.Charset =การเข้ารหัสอักขระ
sInfo = tStream.ReadText
tStream.ปิด
'รับชื่อรายการแบบฟอร์ม
iFormStart = InStrB(iInfoEnd,RequestData,sStart)
iFindStart = InStr(22,sInfo,"name=""",1)+6
iFindEnd = InStr(iFindStart,sInfo,"""",1)
sFormName = lcase(กลาง (sinfo,iFindStart,iFindEnd-iFindStart))
'ถ้าเป็นไฟล์
ถ้า InStr (45,sInfo,"filename=""",1) > 0 จากนั้น
ตั้งค่า File=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 =กลาง (sinfo,iFindStart,iFindEnd-iFindStart)
theFile.FileStart =iInfoEnd
theFile.FileSize = iFormStart -iInfoEnd -3
theFile.FormName=sFormName
ถ้าไม่ใช่ objFile.Exists(sFormName) จากนั้น
objFile.add sFormName,ไฟล์
สิ้นสุดถ้า
อื่น
'ถ้าเป็นไอเทมรูปแบบ
tStream.Type =1
tStream.Mode =3
tStream.เปิด
SundyUpload_SourceData.Position = iInfoEnd
SundyUpload_SourceData.CopyTo tStream,iFormStart-iInfoEnd-3
tStream.ตำแหน่ง = 0
tStream.Type = 2
tStream.Charset = การเข้ารหัสอักขระ
sFormValue = tStream.ReadText
tStream.ปิด
ถ้า objForm.Exists(sFormName) แล้ว
objForm(sFormName)=objForm(sFormName)&", "&sFormValue
อื่น
objForm เพิ่ม sFormName, sFormValue
สิ้นสุดถ้า
สิ้นสุดถ้า
iFormStart=iFormStart+iStart+1
เวนด์
ขอข้อมูล = ""
ตั้งค่า tStream = ไม่มีเลย
จบหมวดย่อย
คลาสย่อยส่วนตัว_เริ่มต้น
จบหมวดย่อย
Class_Terminate ย่อยส่วนตัว
ถ้า Request.TotalBytes>0 แล้ว
objForm.RemoveAll
objFile.RemoveAll
ตั้งค่า objForm=ไม่มีอะไร
ตั้งค่า objFile=ไม่มีอะไร
SundyUpload_SourceData.ปิด
ตั้งค่า SundyUpload_SourceData = ไม่มีเลย
สิ้นสุดถ้า
ตั้งค่า objProgress = ไม่มีเลย
ตั้ง objFso = Server.CreateObject("Scripting.FileSystemObject")
ถ้า objFso.FileExists(xmlPath) แล้ว
objFso.DeleteFile (xmlPath)
สิ้นสุดถ้า
ตั้ง objFso = ไม่มีเลย
จบหมวดย่อย
ฟังก์ชั่นส่วนตัว GetFilePath (FullPath)
ถ้า FullPath <> "" แล้ว
GetFilePath = ซ้าย (FullPath, InStrRev (FullPath, ""))
อื่น
GetFilePath = ""
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
ฟังก์ชั่นส่วนตัว GetFileName (FullPath)
ถ้า FullPath <> "" แล้ว
GetFileName = mid(FullPath,InStrRev(FullPath, "")+1)
อื่น
รับชื่อไฟล์ = ""
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
จบคลาส Class
FileInfo
FormName, ชื่อไฟล์, FilePath, ขนาดไฟล์, ประเภทไฟล์, FileStart
คลาสย่อยส่วนตัว_เริ่มต้น
ชื่อไฟล์ = ""
เส้นทางไฟล์ = ""
ขนาดไฟล์ = 0
ไฟล์สตาร์ท= 0
ชื่อแบบฟอร์ม = ""
ประเภทไฟล์ = ""
จบหมวดย่อย
ฟังก์ชั่นสาธารณะ SaveAs (FullPath)
ติ่ม dr, ErrorChar, i
บันทึกเป็น=จริง
'การตอบสนองเขียนเส้นทางแบบเต็ม & "........................<br>"
'ชื่อไฟล์="ss.txt"
ถ้า trim(fullpath)="" หรือ FileStart=0 หรือ fileName="" หรือ right(fullpath,1)="/" จากนั้นออกจากฟังก์ชัน
'ตอบกลับเขียน "2.................<br>"
ตั้งค่า dr=CreateObject("Adodb.Stream")
ดร.โหมด=3
ดร.ประเภท=1
ดร.เปิด
SundyUpload_SourceData.position=FileStart
SundyUpload_SourceData.copyไปที่ dr,FileSize
dr.SaveToFile FullPath,2
ดร.ปิด
ตั้งค่า dr=Nothing
บันทึกเป็น=เท็จ
ฟังก์ชันสิ้นสุด
จบ
ชั้นเรียน ความก้าวหน้าของ
ชั้นเรียน
หรี่ objDom,xmlPath
เวลาเริ่มต้นสลัว
คลาสย่อยส่วนตัว_
เริ่มต้นส่วนย่อย
ProgressInit ย่อยสาธารณะ (xmlPathTmp)
ติ่ม objRoot, objChild
หรี่ objPI
xmlPath = xmlPathTmp
ตั้ง objDom = Server.CreateObject("Microsoft.XMLDOM")
ตั้งค่า objRoot = objDom.createElement("ความคืบหน้า")
objDom.appendChild objRoot
ตั้งค่า objChild = objDom.createElement("จำนวนไบต์ทั้งหมด")
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("เวลาทั้งหมด")
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.insertBefore objPI, objDom.childNodes(0)
objDom บันทึก xmlPath
ตั้ง objPI = ไม่มีเลย
ตั้ง objChild = ไม่มีเลย
ตั้งค่า objRoot = ไม่มีเลย
ตั้ง objDom = ไม่มีเลย
จบหมวดย่อย
ย่อย UpdateProgress (tBytes, rBytes)
Dim eTime, เวลาปัจจุบัน, ความเร็ว, เวลาทั้งหมด, เวลาซ้าย, เปอร์เซ็นต์
ถ้า rBytes = 0 แล้ว
startTime=ตัวจับเวลา
ตั้ง objDom = Server.CreateObject("Microsoft.XMLDOM")
objDom.load(xmlPath)
objDom.selectsinglenode("//totalbytes").text=tBytes
objDom.save(xmlPath)
อื่น
ความเร็ว = 0.0001
เวลาปัจจุบัน = ตัวจับเวลา
eTime = เวลาปัจจุบัน - เวลาเริ่มต้น
ถ้า eTime>0 ดังนั้นความเร็ว = rBytes / eTime
เวลาทั้งหมด = tBytes/ความเร็ว
เวลาที่เหลือ = (tBytes - rBytes) / ความเร็ว
เปอร์เซ็นต์ = รอบ (rBytes *100 / tBytes)
'objDom.selectsinglenode("//uploadbytes").text = rBytes
'objDom.selectsinglenode("//uploadspeed").text = ความเร็ว
'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(ความเร็ว) & "/วินาที"
objDom.selectsinglenode("//เวลาทั้งหมด").text = SecToTime(เวลาทั้งหมด)
objDom.selectsinglenode("//lefttime").text = SecToTime(leftTime)
objDom.save(xmlPath)
สิ้นสุดถ้า
สิ้นสุด
ฟังก์ชันส่วนตัวย่อย SecToTime (วินาที)
หรี่แสง h:h = "0"
หรี่ m:m = "0"
หรี่ s:s = "0"
h = รอบ (วินาที / 3600)
m = รอบ ((วินาที mod 3600) / 60)
s = รอบ (วินาที mod 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
เค = 1,024
ม. = 1024*1024
ก. = 1024*1024*1024
วิทยุ=1
ถ้า Fix(fsize / g) > 0.0 แล้ว
unitTMP = "GB"
วิทยุ=ก
ElseIf Fix(fsize / m) > 0 จากนั้น
unitTMP = "เมกะไบต์"
วิทยุ=ม
ElseIf Fix(fsize / k) > 0 จากนั้น
unitTMP = "KB"
วิทยุ=เค
อื่น
unitTMP = "B"
วิทยุ=1
สิ้นสุดถ้า
ถ้าวิทยุ = 1 แล้ว
FormatFileSize = fsize & " " & unitTMP
อื่น
FormatFileSize = FormatNumber(fsize/radio,3) & unitTMP
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
คลาสย่อยส่วนตัว_Terminate
ตั้ง objDom = ไม่มีเลย
จบหมวดย่อย
จบคลาส
'http://www.knowsky.com/'
-
<ภาษาสคริปต์ = "จาวาสคริปต์">
//เริ่มแถบความคืบหน้า
ฟังก์ชั่น startProgress (xmlPath) {
แสดงความคืบหน้า();
setProgressDivPos();
setTimeout("DisplayProgressBar('" + xmlPath + "')",500);
}
ฟังก์ชัน DisplayProgressBar(xmlPath){
var xmlDoc = ActiveXObject ใหม่ ("Msxml2.DOMDocument.3.0");
xmlDoc.async = เท็จ;
xmlDoc.load(xmlPath);
ถ้า (xmlDoc.parseError.errorCode!=0){
ข้อผิดพลาด var = xmlDoc.parseError;
การแจ้งเตือน (ข้อผิดพลาดเหตุผล)
setTimeout("DisplayProgressBar('" + xmlPath + "')",1000);
กลับ;
-
var root = xmlDoc.documentElement; // โหนดรูท
var Totalbytes = root.childNodes(0).ข้อความ;
var uploadbytes = root.childNodes(1).text;
เปอร์เซ็นต์ var = root.childNodes(2).text;
ProgressPercent.innerHTML = เปอร์เซ็นต์ + "%";
ProgressBar.style.width = เปอร์เซ็นต์ + "%";
uploadSize.innerHTML = อัพโหลดไบต์;
uploadSpeed.innerHTML = root.childNodes(3).text;
TotalTime.innerHTML = root.childNodes(4).ข้อความ;
leftTime.innerHTML = root.childNodes(5).text;
ถ้า (เปอร์เซ็นต์<100){
setTimeout("DisplayProgressBar('" + xmlPath + "')",1000);
-
}
ฟังก์ชัน displayProgress(){
var objProgress = document.getElementById("ความคืบหน้า");
objProgress.style.display = "";
-
ฟังก์ชั่น closeProgress(){
var objProgress = document.getElementById("ความคืบหน้า");
objProgress.style.display = "ไม่มี";
-
ฟังก์ชั่น setProgressDivPos(){
var objProgress = document.getElementById("ความคืบหน้า");
objProgress.style.top = document.body.scrollTop+(document.body.clientHeight-document.getElementById("ความคืบหน้า").offsetHeight)/2
objProgress.style.left = document.body.scrollLeft+(document.body.clientWidth-document.getElementById("ความคืบหน้า").offsetWidth)/2;
-
</สคริปต์>
<style type="text/css">
.ความคืบหน้า {
ตำแหน่ง: แน่นอน;
ช่องว่างภายใน: 4px;
ด้านบน: 50;
ซ้าย: 400;
ตระกูลฟอนต์: Verdana, Helvetica, Arial, sans-serif;
ขนาดตัวอักษร: 12px;
ความกว้าง: 250px;
ความสูง:100px;
พื้นหลัง: #FFFFD1;
สี: #3D2C05;
เส้นขอบ: 1px ทึบ #715208;
/* กรรมสิทธิ์ของ Mozilla */
-moz-border-รัศมี: 5px;
/*-ความทึบแสง: 0.95; */
-
.ตารางความคืบหน้า, .ความคืบหน้า td{
ขนาดตัวอักษร:9pt;
}
.บาร์{
ความกว้าง:100%;
ความสูง:15px;
สีพื้นหลัง:#CCCCCC;
เส้นขอบ: 1px สิ่งที่ใส่เข้าไป #666666;
ขอบล่าง:4px;
} .
ความคืบหน้าเปอร์เซ็นต์{
ขนาดตัวอักษร: 9pt;
สี: #000000;
ความสูง: 15px;
ตำแหน่ง: แน่นอน;
ดัชนี z: 20;
ความกว้าง: 100%;
การจัดแนวข้อความ: กึ่งกลาง;
-
.แถบความคืบหน้า{
สีพื้นหลัง:#91D65C;
ความกว้าง:1px;
ความสูง:15px;
-
</สไตล์>
<div id="ความคืบหน้า" style="display:none;" class="ความคืบหน้า">
<ระดับ div="บาร์">
<div id="ProgressPercent" class="ProgressPercent">0%</div>
<div id="ProgressBar" class="ProgressBar"></div>
</div>
<table border="0" cellspacing="0" cellpadding="2">
<tr>
<td>อัปโหลดแล้ว</td>
<td>:</td>
<td id="uploadSize"></td>
</tr>
<tr>
<td>ความเร็วในการอัพโหลด</td>
<td>:</td>
<td id="uploadSpeed"> </td>
</tr>
<tr>
<td>เวลาทั้งหมดที่ต้องการ</td>
<td>:</td>
<td id="totalTime"> </td>
</tr>
<tr>
<td>เวลาที่เหลืออยู่</td>
<td>:</td>
<td id="leftTime"> </td>
</tr>
</ตาราง>
</div>
http://blog.csdn.net/delinsql/archive/2006/12/29/1467430.aspx