Exemple.asp
< %@LANGUAGE="VBSCRIPT " CODEPAGE="65001"%>
<!--#include file="SundyUpload.asp"-->
<%
'Le codage du document de cet exemple est UTF-8. S'il s'agit d'un autre système de codage, veuillez convertir le codage en codage correspondant, sinon les données obtenues par le formulaire risquent d'être tronquées.
Dim objUpload, opt
DimxmlChemin
Dim fileFormName, objFile, compteur
opt = request.QueryString("opt")
Si opt = "Télécharger" Alors
xmlPath = Server.MapPath(request.QueryString("xmlPath"))'Convertir le chemin virtuel en chemin réel
Set objUpload=new SundyUpload 'Créer un objet de téléchargement
objUpload.UploadInit xmlPath,"utf-8"
compteur=1
Response.Write("Forme normale :" & objUpload.Form("normalForm") & "<BR><BR>")'Obtenir les données du formulaire
Pour chaque fileFormName dans objUpload.objFile
Définir objFile=objUpload.objFile(fileFormName)
fileSize = objFile.FileSize
strTemp= objFile.FilePath
Réponse.Write strTemp
nomfichier = mid(strTemp,InStrRev(strTemp, "")+1)
Si fileSize > 0 Alors
Réponse.Write("Taille du fichier :" & fileSize & "<BR>")
Response.Write("Nom du fichier :" & objFile.FilePath & "<BR>")
' Response.Write("Description du fichier :" & objUpload.Form("fileDesc" & compteur) & "<BR><BR>")
objFile.SaveAs Server.MapPath(".") & "upload" & fileName
Response.Write "Enregistrer sous : "&Server.MapPath(".") & "upload" & fileName & "<br><br>"
Fin si
compteur = compteur + 1
Suivant
Fin si
'Télécharger le fichier de données de la barre de progression (spécifiez le chemin virtuel du fichier XML)
"Il est préférable d'être aléatoire, car plusieurs personnes peuvent télécharger en même temps et nécessiter des données de progression différentes.
"Ce chemin doit être transmis au composant de téléchargement lors de la soumission afin que les données de progression puissent être modifiées pendant le processus de téléchargement.
'Le client utilise Javascript pour lire ce fichier XML et afficher la progression
xmlPath = "upload/" & Minuterie & ".xml"
%>
<html>
<tête>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Exemple de barre de progression du téléchargement Sundy</title>
<langage de script="javascript">
fonction chkFrm(){
var objFrm = document.frmUpload;
if (objFrm.file1.value=="" && objFrm.file2.value==""){
alert("Veuillez sélectionner un fichier");
objFrm.file1.focus();
renvoie faux ;
}
objFrm.action = "Example.asp?opt=Upload&xmlPath=<%=xmlPath%>";
startProgress('<%=xmlPath%>');//Démarrer la barre de progression
renvoie vrai ;
}
</script>
</tête>
<corps>
<form name="frmUpload" method="post" action="Example.asp" enctype="multipart/form-data" onSubmit="return chkFrm()">
Forme normale :<BR><input type="text" name="normalForm" size="40"><BR><BR>
Fichier 1 :<BR>
<input type="file" name="file1" size="40"></br>
<input type="text" name="fileDesc1" size="30"><BR><BR>
Fichier 2 :<BR>
<input type="file" name="file2" size="40"></br>
<input type="text" name="fileDesc2" size="30"><BR>
Fichier 3 :<BR>
<input type="file" name="file3" size="40"></br>
Fichier 4 :<BR>
<input type="file" name="file4" size="40"></br>
Fichier 5 :<BR>
<input type="file" name="file5" size="40"></br>
<input type="submit" name="btnSubmit" value="submit"/>
</form>
</corps>
</html>
SundyUpload.asp
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<%
DimSundyUpload_SourceData
ClasseSundyUpload
Dim objForm, objFile, Version, objProgress
Dim xmlPath,CharsetEncoding
Formulaire de fonction publique (strForm)
strForm=lcase(strForm)
Si PAS objForm.exists(strForm) Alors
Formulaire=""
Autre
Formulaire=objForm(strForm)
Fin si
de fonction de fin
(strFile)
strFile=lcase(strFichier)
Si PAS objFile.exists(strFile) Alors
Définir le fichier = nouveau FileInfo
Autre
Définir le fichier = objFile (strFile)
Fin si
Fonction de fin
Sous-poste public UploadInit (progressXmlPath, jeu de caractères)
Dim RequestData, sStart, Crlf, sInfo, iInfoStart, iInfoEnd, tStream, iStart, theFile
Dim iFileSize, sFilePath, sFileType, sFormValue, sFileName
Dim iFindStart,iFindEnd
Dim iFormStart,iFormEnd,sFormName
Version="Barre de progression de la largeur de téléchargement version 1.0"
Définir objForm=Server.CreateObject("Scripting.Dictionary")
Définir objFile=Server.CreateObject("Scripting.Dictionary")
Si Request.TotalBytes <1 alors quittez Sub
Définir tStream = Server.CreateObject("adodb.stream")
Définir SundyUpload_SourceData = Server.CreateObject("adodb.stream")
SundyUpload_SourceData.Type = 1
SundyUpload_SourceData.Mode =3
SundyUpload_SourceData.Open
DimTotalOctets
Dim ChunkReadSize
Dim DataPart, PartSize
Dim objProgress
TotalBytes = Request.TotalBytes 'Taille totale
ChunkReadSize = 64 * 1024 ' Taille du morceau 64K
OctetsLecture = 0
xmlPath = progressionXmlPath
CharsetEncoding = jeu de caractères
Si CharsetEncoding = "" Alors
CharsetEncoding = "utf-8"
Fin si
Définir objProgress = Nouvelle progression
objProgress.ProgressInit(xmlPath)
objProgress.UpdateProgress Nombre total d'octets,0
'Lecture du bloc de boucle
Faire pendant que BytesRead < TotalBytes
'Lire en morceaux
TaillePart = ChunkReadSize
Si PartSize + BytesRead > TotalBytes Alors PartSize = TotalBytes - BytesRead
DataPart = Request.BinaryRead (PartSize)
OctetsRead = OctetsRead + PartSize
SundyUpload_SourceData.Write DataPart
objProgress.UpdateProgress Totalbytes, OctetsLecture
Boucle
'SundyUpload_SourceData.Write Request.BinaryRead(Request.TotalBytes)
SundyUpload_SourceData.Position=0
RequestData =SundyUpload_SourceData.Read
iFormDébut=1
iFormEnd = LenB (RequêteDonnées)
Crlf = chrB(13) & chrB(10)
sDébut = MidB(RequestData,1, InStrB(iFormStart,RequestData,Crlf)-1)
iDébut = LenB(sDébut)
iFormDébut=iFormDébut+iDébut+1
Tandis que (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.Fermer
'Obtenir le nom de l'élément du formulaire
iFormStart = InStrB(iInfoEnd,RequestData,sStart)
iFindStart = InStr(22,sInfo,"name=""",1)+6
iFindEnd = InStr(iFindStart,sInfo,"""",1)
sFormName = lcase(Mid (sinfo,iFindStart,iFindEnd-iFindStart))
'Si c'est un fichier
Si InStr (45,sInfo,"filename=""",1) > 0 Alors
Définir theFile = nouveau FileInfo
'Obtenir le nom du fichier
iFindStart = InStr(iFindEnd,sInfo,"filename=""",1)+10
iFindEnd = InStr(iFindStart,sInfo,"""",1)
sFileName = Milieu (sinfo,iFindStart,iFindEnd-iFindStart)
theFile.FileName=getFileName(sFileName)
theFile.FilePath=getFilePath(sFileName)
'Obtenir le type de fichier
iFindStart = InStr(iFindEnd,sInfo,"Content-Type : ",1)+14
iFindEnd = InStr(iFindStart,sInfo,vbCr)
theFile.FileType = Milieu (sinfo, iFindStart, iFindEnd-iFindStart)
theFile.FileStart =iInfoEnd
theFile.FileSize = iFormStart -iInfoEnd -3
theFile.FormName=sFormName
Si PAS objFile.Exists(sFormName) Alors
objFile.ajouter sFormName,leFichier
Fin si
Autre
'S'il s'agit d'un élément de formulaire
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.Fermer
Si objForm.Exists(sFormName) Alors
objForm(sFormName)=objForm(sFormName)&", "&sFormValue
Autre
objForm.Add sFormName,sFormValue
Fin si
Fin si
iFormDébut=iFormDébut+iDébut+1
Wende
DemandeDonnées=""
Définir tStream = Rien
Fin du sous-marin
Sous-classe privée_Initialize
Fin du sous-marin
Sous-classe privée_Terminate
Si Request.TotalBytes>0 Alors
objForm.RemoveAll
objFile.RemoveAll
Définir objForm=Rien
Définir objFile=Rien
SundyUpload_SourceData.Fermer
Définir SundyUpload_SourceData = Rien
Fin si
Définir objProgress = Rien
Définir objFso = Server.CreateObject("Scripting.FileSystemObject")
Si objFso.FileExists(xmlPath) Alors
objFso.DeleteFile(xmlPath)
Fin si
Définir objFso = Rien
Fin du sous-marin
Fonction privée GetFilePath (FullPath)
Si FullPath <> "" Alors
GetFilePath = gauche (FullPath, InStrRev (FullPath, ""))
Autre
GetFilePath = ""
Fin si
Fonction de fin
Fonction privée GetFileName (FullPath)
Si FullPath <> "" Alors
GetFileName = milieu (FullPath, InStrRev (FullPath, "")+1)
Autre
GetFileName = ""
Fin si
Fonction de fin
Fin de la classe
Class FileInfo
Dim FormName, FileName, FilePath, FileSize, FileType, FileStart
Sous-classe privée_Initialize
Nom du fichier = ""
Chemin du fichier = ""
Taille du fichier = 0
Départ Fichier= 0
Nom du formulaire = ""
Type de fichier = ""
Fin du sous-marin
Fonction publique SaveAs (FullPath)
Dim dr,ErrorChar,i
Enregistrer sous = Vrai
'Réponse.Écrivez le chemin complet & "........................<br>"
'NomFichier="ss.txt"
Si trim(fullpath,1)="" ou FileStart=0 ou fileName="" ou right(fullpath,1)="/" Alors quittez la fonction
'Réponse.Écrivez "2..........................<br>"
Définir dr=CreateObject("Adodb.Stream")
dr.Mode=3
dr.Type=1
dr.Ouvrir
SundyUpload_SourceData.position=FileStart
SundyUpload_SourceData.copyto dr,FileSize
dr.SaveToFile Chemin complet,2
dr.Fermer
Définir dr=Rien
Enregistrer sous = faux
Fonction de fin
Fin du
cours Progression
du cours
Dim objDom,xmlPath
Dim startTime
Sous-classe privée_Initialize
End Sub
Sous-ProgressInit public (xmlPathTmp)
Dim objRoot, objChild
Dim objPI
xmlPath = xmlPathTmp
Définir objDom = Server.CreateObject("Microsoft.XMLDOM")
Définir objRoot = objDom.createElement("progress")
objDom.appendChild objRoot
Définir objChild = objDom.createElement("totalbytes")
objChild.Texte = "0"
objRoot.appendChild objChild
Définir objChild = objDom.createElement("uploadbytes")
objChild.Texte = "0"
objRoot.appendChild objChild
Définir objChild = objDom.createElement("uploadpercent")
objChild.Text = "0%"
objRoot.appendChild objChild
Définir objChild = objDom.createElement("uploadspeed")
objChild.Texte = "0"
objRoot.appendChild objChild
Définir objChild = objDom.createElement("totaltime")
objChild.Text = "00:00:00"
objRoot.appendChild objChild
Définir objChild = objDom.createElement("lefttime")
objChild.Text = "00:00:00"
objRoot.appendChild objChild
Définir objPI = objDom.createProcessingInstruction("xml","version='1.0' encoding='utf-8'")
objDom.insertBefore objPI, objDom.childNodes(0)
objDom.Enregistrer xmlPath
Définir objPI = Rien
Définir objChild = Rien
Définir objRoot = Rien
Définir objDom = Rien
Fin du sous-marin
Sous UpdateProgress (tBytes, rBytes)
Dim eTime, currentTime, vitesse, totalTime, leftTime, pourcentage
Si rBytes = 0 Alors
startTime = Minuterie
Définir objDom = Server.CreateObject("Microsoft.XMLDOM")
objDom.load(xmlPath)
objDom.selectsinglenode("//totalbytes").text=tBytes
objDom.save(xmlPath)
Autre
vitesse = 0,0001
currentTime = Minuterie
eTime = heure actuelle - heure de début
Si eTime>0 Alors vitesse = rBytes / eTime
totalTime = tOctets/vitesse
leftTime = (tBytes - rBytes) / vitesse
pourcentage = rond (roctets * 100 / toctets)
'objDom.selectsinglenode("//uploadbytes").text = rBytes
'objDom.selectsinglenode("//uploadspeed").text = vitesse
'objDom.selectsinglenode("//temps total").text = temps total
'objDom.selectsinglenode("//lefttime").text = leftTime
objDom.selectsinglenode("//uploadbytes").text = FormatFileSize(rBytes) & " / " & FormatFileSize(tBytes)
objDom.selectsinglenode("//uploadpercent").text = pourcentage
objDom.selectsinglenode("//uploadspeed").text = FormatFileSize(vitesse) & "/sec"
objDom.selectsinglenode("//totaltime").text = SecToTime(totalTime)
objDom.selectsinglenode("//lefttime").text = SecToTime(leftTime)
objDom.save(xmlPath)
Fin si
Fin de
la fonction sous-privée SecToTime (sec)
Dim h:h = "0"
Dim m:m = "0"
Dim s:s = "0"
h = rond (sec / 3600)
m = rond ((sec mod 3600) / 60)
s = rond (sec mod 60)
Si LEN(h)=1 Alors h = "0" & h
Si LEN(m)=1 Alors m = "0" & m
Si LEN(s)=1 Alors s = "0" & s
SecToTime = (h & ":" & m & ":" & s)
Fonction de fin
fonction privée FormatFileSize (fsize)
Dim radio, k, m, g, unité TMP
k = 1024
m = 1024*1024
g = 1024*1024*1024
radio=1
Si Fix(fsize / g) > 0.0 Alors
unitéTMP = "Go"
radio=g
SinonSi Fix(fsize / m) > 0 Alors
unitéTMP = "Mo"
radio=m
SinonSi Fix(fsize / k) > 0 Alors
unitéTMP = "Ko"
radio=k
Autre
unitéTMP = "B"
radio=1
Fin si
Si radio = 1 Alors
FormatFileSize = fsize & " "
Autre
FormatFileSize = FormatNumber(fsize/radio,3) & unitTMP
Fin si
Fonction de fin
sous-classe privée_Terminate
Définir objDom = Rien
Fin du sous-marin
Fin du cours
'http://www.knowsky.com/
%>
<langage de script="javascript">
//Démarrer la barre de progression
fonction startProgress(xmlPath){
displayProgress();
setProgressDivPos();
setTimeout("DisplayProgressBar('" + xmlPath + "')",500);
}
fonction DisplayProgressBar(xmlPath){
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
xmlDoc.async = faux ;
xmlDoc.load(xmlPath);
si (xmlDoc.parseError.errorCode!=0){
var erreur = xmlDoc.parseError;
alerte (erreur.raison)
setTimeout("DisplayProgressBar('" + xmlPath + "')",1000);
retour;
}
var root = xmlDoc.documentElement; //Nœud racine
var totalbytes = root.childNodes(0).text;
var uploadbytes = root.childNodes(1).text;
var pour cent = root.childNodes(2).text;
ProgressPercent.innerHTML = pourcentage + "%" ;
ProgressBar.style.width = pourcentage + "%" ;
uploadSize.innerHTML = uploadbytes ;
uploadSpeed.innerHTML = root.childNodes(3).text;
totalTime.innerHTML = root.childNodes(4).text;
leftTime.innerHTML = root.childNodes(5).text;
si (pourcentage <100){
setTimeout("DisplayProgressBar('" + xmlPath + "')",1000);
}
}
fonction displayProgress(){
var objProgress = document.getElementById("Progress");
objProgress.style.display = "";
}
fonction closeProgress(){
var objProgress = document.getElementById("Progress");
objProgress.style.display = "aucun" ;
}
fonction 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">
.progrès {
position : absolue ;
remplissage : 4 px ;
haut : 50 ;
à gauche : 400 ;
famille de polices : Verdana, Helvetica, Arial, sans-serif ;
taille de police : 12 px ;
largeur : 250 px ;
hauteur : 100 px ;
arrière-plan : #FFFFD1 ;
couleur : #3D2C05 ;
bordure : 1px solide #715208 ;
/* Propriétaire de Mozilla */
-moz-border-radius : 5px ;
/*-moz-opacité : 0,95 */
}
.table de progression, .progress td{
taille de police : 9 pt ;
}
.Bar{
largeur : 100 % ;
hauteur : 15 px ;
couleur d'arrière-plan : #CCCCCC ;
bordure : encart 1px #666666 ;
marge inférieure : 4 px ;
}
.ProgressPercent{
taille de police : 9 pt ;
couleur : #000000 ;
hauteur : 15px ;
position : absolue ;
indice z : 20 ;
largeur : 100 % ;
alignement du texte : centre ;
}
.Barre de progression{
couleur d'arrière-plan : #91D65C ;
largeur : 1 px ;
hauteur : 15 px ;
}
</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>Téléchargé</td>
<td> :</td>
<td id="uploadSize"></td>
</tr>
<tr>
<td>Vitesse de téléchargement</td>
<td> :</td>
<td id="uploadSpeed"> </td>
</tr>
<tr>
<td>Durée totale requise</td>
<td> :</td>
<td id="totalTime"> </td>
</tr>
<tr>
<td>Temps restant</td>
<td> :</td>
<td id="leftTime"> </td>
</tr>
</table>
</div>
http://blog.csdn.net/delinsql/archive/2006/12/29/1467430.aspx