Beispiel.asp
< %@LANGUAGE="VBSCRIPT " CODEPAGE="65001"%>
<!--#include file="SundyUpload.asp"-->
<%
„Die Dokumentkodierung dieses Beispiels ist UTF-8. Wenn es sich um ein anderes Kodierungssystem handelt, konvertieren Sie die Kodierung bitte in die entsprechende Kodierung, da sonst die vom Formular erhaltenen Daten möglicherweise verstümmelt sind.“
Dim objUpload,opt
DimxmlPath
Dimmen Sie fileFormName,objFile,counter
opt = request.QueryString("opt")
Wenn opt = „Hochladen“, dann
xmlPath = Server.MapPath(request.QueryString("xmlPath"))'Konvertieren Sie den virtuellen Pfad in den tatsächlichen Pfad
Set objUpload=new SundyUpload 'Erstellen Sie ein Upload-Objekt
objUpload.UploadInit xmlPath,"utf-8"
Zähler=1
Response.Write("Normalform:" & objUpload.Form("normalForm") & "<BR><BR>")'Formulardaten abrufen
Für jeden fileFormName in objUpload.objFile
Setze objFile=objUpload.objFile(fileFormName)
fileSize = objFile.FileSize
strTemp= objFile.FilePath
Response.Write strTemp
fileName = mid(strTemp,InStrRev(strTemp, "")+1)
Wenn fileSize > 0 Dann
Response.Write("Dateigröße:" & fileSize & "<BR>")
Response.Write("Dateiname:" & objFile.FilePath & "<BR>")
' Response.Write("File Description:" & objUpload.Form("fileDesc" & counter) & "<BR><BR>")
objFile.SaveAs Server.MapPath(".") & "upload" & Dateiname
Response.Write „Speichern unter: „&Server.MapPath(“.“) & „upload“ & Dateiname & „<br><br>“
Ende wenn
Zähler = Zähler + 1
Nächste
Ende wenn
'Fortschrittsbalken-Datendatei hochladen (virtuellen Pfad für XML-Datei angeben)
„Am besten ist es, zufällig zu sein, da möglicherweise mehrere Personen gleichzeitig hochladen und unterschiedliche Fortschrittsdaten benötigen.“
„Dieser Pfad muss beim Absenden an die Upload-Komponente übergeben werden, damit die Fortschrittsdaten während des Upload-Vorgangs geändert werden können.“
„Der Client verwendet Javascript, um diese XML-Datei zu lesen und den Fortschritt anzuzeigen.“
xmlPath = „upload/“ & Timer & „.xml“
%>
<html>
<Kopf>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Beispiel für einen Sundy-Upload-Fortschrittsbalken</title>
<script language="javascript">
Funktion chkFrm(){
var objFrm = document.frmUpload;
if (objFrm.file1.value=="" && objFrm.file2.value==""){
Alert("Bitte wählen Sie eine Datei aus");
objFrm.file1.focus();
return false;
}
objFrm.action = "Example.asp?opt=Upload&xmlPath=<%=xmlPath%>";
startProgress('<%=xmlPath%>');//Starten Sie den Fortschrittsbalken
return true;
}
</script>
</head>
<body>
<form name="frmUpload" method="post" action="Example.asp" enctype="multipart/form-data" onSubmit="return chkFrm()">
Normalform:<BR><input type="text" name="normalForm" size="40"><BR><BR>
Datei 1:<BR>
<input type="file" name="file1" size="40"></br>
<input type="text" name="fileDesc1" size="30"><BR><BR>
Datei 2:<BR>
<input type="file" name="file2" size="40"></br>
<input type="text" name="fileDesc2" size="30"><BR>
Datei 3:<BR>
<input type="file" name="file3" size="40"></br>
Datei 4:<BR>
<input type="file" name="file4" size="40"></br>
Datei 5:<BR>
<input type="file" name="file5" size="40"></br>
<input type="submit" name="btnSubmit" value="submit"/>
</form>
</body>
</html>
SundyUpload.asp
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<%
DimSundyUpload_SourceData
ClassSundyUpload
Dimmen Sie objForm, objFile, Version, objProgress
Dimmen Sie xmlPath,CharsetEncoding
Öffentliches Funktionsformular (strForm)
strForm=lcase(strForm)
Wenn NICHT objForm.exists(strForm) Dann
Form=""
Anders
Form=objForm(strForm)
Ende wenn
Endfunktion
Öffentliche Funktionsdatei (strFile)
strFile=lcase(strFile)
Wenn NICHT objFile.exists(strFile) Dann
Legen Sie File=new FileInfo fest
Anders
Set File=objFile(strFile)
Ende wenn
Funktion beenden
Public Sub UploadInit(progressXmlPath,charset)
Dimmen Sie RequestData,sStart,Crlf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,theFile
Dimmen Sie iFileSize, sFilePath, sFileType, sFormValue, sFileName
Dimmen Sie iFindStart, iFindEnd
Dimmen Sie iFormStart, iFormEnd, sFormName
Version="Upload-Breite-Fortschrittsbalken Version 1.0"
Setze objForm=Server.CreateObject("Scripting.Dictionary")
Setze objFile=Server.CreateObject("Scripting.Dictionary")
Wenn Request.TotalBytes<1, dann beenden Sie Sub
Setze tStream = Server.CreateObject("adodb.stream")
Setze SundyUpload_SourceData = Server.CreateObject("adodb.stream")
SundyUpload_SourceData.Type = 1
SundyUpload_SourceData.Mode =3
SundyUpload_SourceData.Open
DimTotalBytes
ChunkReadSize dimmen
Dimmen Sie DataPart, PartSize
Dim objProgress
TotalBytes = Request.TotalBytes 'Gesamtgröße
ChunkReadSize = 64 * 1024 ' Chunkgröße 64 KB
BytesRead = 0
xmlPath = progressXmlPath
CharsetEncoding = Zeichensatz
Wenn CharsetEncoding = "" Dann
CharsetEncoding = „utf-8“
Ende wenn
Setze objProgress = Neuer Fortschritt
objProgress.ProgressInit(xmlPath)
objProgress.UpdateProgress Totalbytes,0
'Lesen des Schleifenblocks
Machen Sie While BytesRead < TotalBytes
„Lesen Sie in Abschnitten
PartSize = ChunkReadSize
Wenn PartSize + BytesRead > TotalBytes, dann ist PartSize = TotalBytes - BytesRead
DataPart = Request.BinaryRead(PartSize)
BytesRead = BytesRead + PartSize
SundyUpload_SourceData.Write DataPart
objProgress.UpdateProgress Totalbytes,BytesRead
Schleife
'SundyUpload_SourceData.Write Request.BinaryRead(Request.TotalBytes)
SundyUpload_SourceData.Position=0
RequestData =SundyUpload_SourceData.Read
iFormStart=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
While (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
'Formularelementnamen abrufen
iFormStart = InStrB(iInfoEnd,RequestData,sStart)
iFindStart = InStr(22,sInfo,"name=""",1)+6
iFindEnd = InStr(iFindStart,sInfo,"""",1)
sFormName = lcase(Mid (sinfo,iFindStart,iFindEnd-iFindStart))
„Wenn es eine Datei ist
Wenn InStr (45,sInfo,"filename=""",1) > 0 Dann
Legen Sie theFile=new FileInfo fest
'Holen Sie sich den Dateinamen
iFindStart = InStr(iFindEnd,sInfo,"filename=""",1)+10
iFindEnd = InStr(iFindStart,sInfo,"""",1)
sFileName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
theFile.FileName=getFileName(sFileName)
theFile.FilePath=getFilePath(sFileName)
'Dateityp abrufen
iFindStart = InStr(iFindEnd,sInfo,"Content-Type: ",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
Wenn NICHT objFile.Exists(sFormName) Dann
objFile.add sFormName,theFile
Ende wenn
Anders
'Wenn es sich um ein Formularelement handelt
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
Wenn objForm.Exists(sFormName) Dann
objForm(sFormName)=objForm(sFormName)&", "&sFormValue
Anders
objForm.Füge sFormName,sFormValue hinzu
Ende wenn
Ende wenn
iFormStart=iFormStart+iStart+1
Wend
RequestData=""
Setze tStream = Nothing
Sub beenden
Private Sub Class_Initialize
Sub beenden
Private Unterklasse_Terminate
Wenn Request.TotalBytes>0, dann
objForm.RemoveAll
objFile.RemoveAll
Setze objForm=Nothing
Setze objFile=Nothing
SundyUpload_SourceData.Close
Setzen Sie SundyUpload_SourceData = Nothing
Ende wenn
Setze objProgress = Nothing
Setze objFso = Server.CreateObject("Scripting.FileSystemObject")
Wenn objFso.FileExists(xmlPath) Dann
objFso.DeleteFile(xmlPath)
Ende wenn
Setze objFso = Nichts
Sub beenden
Private Funktion GetFilePath(FullPath)
Wenn FullPath <> "" Dann
GetFilePath = left(FullPath,InStrRev(FullPath, ""))
Anders
GetFilePath = ""
Ende wenn
Funktion beenden
Private Funktion GetFileName(FullPath)
Wenn FullPath <> "" Dann
GetFileName = mid(FullPath,InStrRev(FullPath, "")+1)
Anders
GetFileName = ""
Ende wenn
Funktion beenden
Endklasse-
Klasse FileInfo
Dimmen Sie FormName, FileName, FilePath, FileSize, FileType, FileStart
Private Sub Class_Initialize
Dateiname = ""
FilePath = ""
FileSize = 0
FileStart= 0
FormName = ""
FileType = ""
Sub beenden
Öffentliche Funktion SaveAs(FullPath)
Dim dr,ErrorChar,i
SaveAs=True
'Response.Write fullpath & "........................<br>"
'FileName="ss.txt"
Wenn trim(fullpath)="" oder FileStart=0 oder fileName="" oder right(fullpath,1)="/" dann Funktion beenden
'Response.Write "2........................<br>"
Setze dr=CreateObject("Adodb.Stream")
dr.Mode=3
dr.Type=1
dr.Öffnen
SundyUpload_SourceData.position=FileStart
SundyUpload_SourceData.copyto dr,FileSize
dr.SaveToFile FullPath,2
dr.Schließen
Setze dr=Nichts
SaveAs=False
Funktion beenden
Klassenfortschritt
beenden
Dimmen Sie objDom,xmlPath
Startzeit dimmen
Private Sub Class_Initialize
End Sub
Öffentlicher Sub ProgressInit(xmlPathTmp)
Dimmen Sie objRoot,objChild
Dim objPI
xmlPath = xmlPathTmp
Set objDom = Server.CreateObject("Microsoft.XMLDOM")
Setze objRoot = objDom.createElement("progress")
objDom.appendChild objRoot
Setze objChild = objDom.createElement("totalbytes")
objChild.Text = "0"
objRoot.appendChild objChild
Setze objChild = objDom.createElement("uploadbytes")
objChild.Text = "0"
objRoot.appendChild objChild
Setze objChild = objDom.createElement("uploadpercent")
objChild.Text = "0%"
objRoot.appendChild objChild
Setze objChild = objDom.createElement("uploadspeed")
objChild.Text = "0"
objRoot.appendChild objChild
Setze objChild = objDom.createElement("totaltime")
objChild.Text = "00:00:00"
objRoot.appendChild objChild
Setze objChild = objDom.createElement("lefttime")
objChild.Text = "00:00:00"
objRoot.appendChild objChild
Setze objPI = objDom.createProcessingInstruction("xml","version='1.0' binding='utf-8'")
objDom.insertBefore objPI, objDom.childNodes(0)
objDom.Save xmlPath
Setze objPI = Nichts
Setze objChild = Nothing
Setze objRoot = Nothing
Setze objDom = Nothing
Sub beenden
Sub UpdateProgress(tBytes,rBytes)
Dim eTime,currentTime,speed,totalTime,leftTime,percent
Wenn rBytes = 0, dann
startTime = Timer
Set objDom = Server.CreateObject("Microsoft.XMLDOM")
objDom.load(xmlPath)
objDom.selectsinglenode("//totalbytes").text=tBytes
objDom.save(xmlPath)
Anders
Geschwindigkeit = 0,0001
currentTime = Timer
eTime = aktuelle Zeit – Startzeit
Wenn eTime>0, dann ist Geschwindigkeit = rBytes / eTime
totalTime = tBytes/Geschwindigkeit
leftTime = (tBytes - rBytes) / Geschwindigkeit
Prozent = Round(rBytes *100 / tBytes)
'objDom.selectsinglenode("//uploadbytes").text = rBytes
'objDom.selectsinglenode("//uploadspeed").text = Geschwindigkeit
'objDom.selectsinglenode("//totaltime").text = totalTime
'objDom.selectsinglenode("//lefttime").text = leftTime
objDom.selectsinglenode("//uploadbytes").text = FormatFileSize(rBytes) & " / " & FormatFileSize(tBytes)
objDom.selectsinglenode("//uploadpercent").text = Prozent
objDom.selectsinglenode("//uploadspeed").text = FormatFileSize(speed) & "/sec"
objDom.selectsinglenode("//totaltime").text = SecToTime(totalTime)
objDom.selectsinglenode("//lefttime").text = SecToTime(leftTime)
objDom.save(xmlPath)
Ende wenn
End Sub
private Function SecToTime(sec)
Dim h:h = „0“
Dim m:m = „0“
Dim s:s = „0“
h = Runde (Sek. / 3600)
m = rund( (Sek. Mod. 3600) / 60)
s = Runde (Sek. Mod. 60)
Wenn LEN(h)=1, dann ist h = „0“ & h
Wenn LEN(m)=1, dann ist m = „0“ & m
Wenn LEN(s)=1, dann ist s = „0“ & s
SecToTime = (h & : & m & :: & s)
Funktion beenden
private Funktion FormatFileSize(fsize)
Radio,k,m,g,unitTMP dimmen
k = 1024
m = 1024*1024
g = 1024*1024*1024
Radio=1
Wenn Fix(fsize / g) > 0,0 Dann
unitTMP = "GB"
radio=g
ElseIf Fix(fsize / m) > 0 Dann
unitTMP = "MB"
radio=m
ElseIf Fix(fsize / k) > 0 Dann
unitTMP = "KB"
radio=k
Anders
unitTMP = "B"
Radio=1
Ende wenn
Wenn Radio = 1, dann
FormatFileSize = fsize & " "
Anders
FormatFileSize = FormatNumber(fsize/radio,3) & unitTMP
Ende wenn
Endfunktion
Private Sub Class_Terminate
Setze objDom = Nothing
Sub beenden
Unterricht beenden
'http://www.knowsky.com/
%>
<script language="javascript">
//Fortschrittsbalken starten
Funktion startProgress(xmlPath){
displayProgress();
setProgressDivPos();
setTimeout("DisplayProgressBar('" + xmlPath + "')",500);
}
Funktion DisplayProgressBar(xmlPath){
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
xmlDoc.async = false;
xmlDoc.load(xmlPath);
if (xmlDoc.parseError.errorCode!=0){
var error = xmlDoc.parseError;
Warnung(error.reason)
setTimeout("DisplayProgressBar('" + xmlPath + "')",1000);
zurückkehren;
}
var root = xmlDoc.documentElement; //Root-Knoten
var totalbytes = root.childNodes(0).text;
var uploadbytes = root.childNodes(1).text;
var percent = root.childNodes(2).text;
ProgressPercent.innerHTML = Prozent + „%“;
ProgressBar.style.width = Prozent + „%“;
uploadSize.innerHTML = uploadbytes;
uploadSpeed.innerHTML = root.childNodes(3).text;
totalTime.innerHTML = root.childNodes(4).text;
leftTime.innerHTML = root.childNodes(5).text;
if (Prozent<100){
setTimeout("DisplayProgressBar('" + xmlPath + "')",1000);
}
}
Funktion displayProgress(){
var objProgress = document.getElementById("Progress");
objProgress.style.display = "";
}
Funktion closeProgress(){
var objProgress = document.getElementById("Progress");
objProgress.style.display = "none";
}
Funktion 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>
<style type="text/css">
.Fortschritt {
Position: absolut;
Polsterung: 4px;
oben: 50;
links: 400;
Schriftfamilie: Verdana, Helvetica, Arial, serifenlos;
Schriftgröße: 12px;
Breite: 250px;
Höhe: 100 Pixel;
Hintergrund: #FFFFD1;
Farbe: #3D2C05;
Rand: 1 Pixel durchgehend #715208;
/* Mozilla-proprietär */
-moz-border-radius: 5px;
/*-moz-opacity: 0,95; */
}
.progress-Tabelle,.progress td{
Schriftgröße:9pt;
}
.Bar{
Breite: 100 %;
Höhe: 15px;
Hintergrundfarbe:#CCCCCC;
Rand: 1px Einschub #666666;
margin-bottom:4px;
}
.ProgressPercent{
Schriftgröße: 9pt;
Farbe: #000000;
Höhe: 15px;
Position: absolut;
Z-Index: 20;
Breite: 100 %;
Textausrichtung: Mitte;
}
.ProgressBar{
Hintergrundfarbe:#91D65C;
Breite: 1px;
Höhe: 15px;
}
</style>
<div id="Progress" style="display:none;" class="progress">
<div class="bar">
<div id="ProgressPercent" class="ProgressPercent">0 %</div>
<div id="ProgressBar" class="ProgressBar"></div>
</div>
<table border="0" cellpacing="0" cellpadding="2">
<tr>
<td>Hochgeladen</td>
<td>:</td>
<td id="uploadSize"></td>
</tr>
<tr>
<td>Upload-Geschwindigkeit</td>
<td>:</td>
<td id="uploadSpeed"> </td>
</tr>
<tr>
<td>Erforderliche Gesamtzeit</td>
<td>:</td>
<td id="totalTime"> </td>
</tr>
<tr>
<td>Verbleibende Zeit</td>
<td>:</td>
<td id="leftTime"> </td>
</tr>
</table>
</div>
http://blog.csdn.net/delinsql/archive/2006/12/29/1467430.aspx