Ejemplo.asp
< %@LANGUAGE="VBSCRIPT " CODEPAGE="65001"%>
<!--#include file="SundyUpload.asp"-->
<%
'La codificación del documento de este ejemplo es UTF-8. Si se trata de otro sistema de codificación, convierta la codificación a la codificación correspondiente; de lo contrario, los datos obtenidos por el formulario pueden ser confusos.
Dim objUpload,opt
DimxmlPath
Dim fileFormName, objFile, contador
optar = solicitud.QueryString("optar")
Si opta = "Subir" Entonces
xmlPath = Server.MapPath(request.QueryString("xmlPath"))'Convertir ruta virtual en ruta real
Establecer objUpload=new SundyUpload 'Crear un objeto de carga
objUpload.UploadInit xmlPath, "utf-8"
contador=1
Response.Write("Forma normal:" & objUpload.Form("normalForm") & "<BR><BR>")'Obtener datos del formulario
Para cada archivoFormName en objUpload.objFile
Establecer objFile=objUpload.objFile(fileFormName)
tamaño de archivo = objFile.FileSize
strTemp = objFile.FilePath
Respuesta.Escribir strTemp
nombre de archivo = mid(strTemp,InStrRev(strTemp, "")+1)
Si tamaño de archivo > 0 entonces
Response.Write("Tamaño de archivo:" & tamaño de archivo & "<BR>")
Response.Write("Nombre de archivo:" & objFile.FilePath & "<BR>")
' Response.Write("Descripción del archivo:" & objUpload.Form("fileDesc" & contador) & "<BR><BR>")
objFile.SaveAs Server.MapPath(".") & "upload" & nombredearchivo
Response.Write "Guardar en: "&Server.MapPath(".") & "upload" & fileName & "<br><br>"
Terminar si
contador = contador + 1
Próximo
Terminar si
'Cargar el archivo de datos de la barra de progreso (especifique la ruta virtual para el archivo XML)
"Es mejor hacerlo al azar, porque varias personas pueden subir contenido al mismo tiempo y requerir datos de progreso diferentes".
'Esta ruta debe pasarse al componente de carga al enviar para que los datos de progreso se puedan cambiar durante el proceso de carga.
'El cliente utiliza Javascript para leer este archivo XML y mostrar el progreso
xmlPath = "cargar/" y temporizador y ".xml"
%>
<html>
<cabeza>
<meta http-equiv="Tipo de contenido" content="text/html; charset=utf-8" />
<title>Ejemplo de barra de progreso de carga de Sundy</title>
<lenguaje de escritura="javascript">
función chkFrm(){
var objFrm = document.frmUpload;
si (objFrm.file1.value=="" && objFrm.file2.value==""){
alert("Por favor seleccione un archivo");
objFrm.file1.focus();
devolver falso;
}
objFrm.action = "Ejemplo.asp?opt=Upload&xmlPath=<%=xmlPath%>";
startProgress('<%=xmlPath%>');//Inicia la barra de progreso
devolver verdadero;
}
</script>
</cabeza>
<cuerpo>
<form name="frmUpload" método="post" action="Ejemplo.asp" enctype="multipart/form-data" onSubmit="return chkFrm()">
Forma normal:<BR><input type="text" name="normalForm" size="40"><BR><BR>
Archivo 1:<BR>
<tipo de entrada="archivo" nombre="archivo1" tamaño="40"></br>
<tipo de entrada="texto" nombre="fileDesc1" tamaño="30"><BR><BR>
Archivo 2:<BR>
<tipo de entrada="archivo" nombre="archivo2" tamaño="40"></br>
<tipo de entrada="texto" nombre="fileDesc2" tamaño="30"><BR>
Archivo 3:<BR>
<tipo de entrada="archivo" nombre="archivo3" tamaño="40"></br>
Archivo 4:<BR>
<tipo de entrada="archivo" nombre="archivo4" tamaño="40"></br>
Archivo 5:<BR>
<tipo de entrada="archivo" nombre="archivo5" tamaño="40"></br>
<tipo de entrada="enviar" nombre="btnSubmit" valor="enviar"/>
</formulario>
</cuerpo>
</html>
SundyUpload.asp
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<%
DimSundyUpload_SourceData
ClaseSundySubir
Dim objForm,objFile,Versión,objProgress
Dim xmlPath,CharsetEncoding
Formulario de función pública (strForm)
strForm=lcase(strForm)
Si NO objForm.exists (strForm) Entonces
Formulario=""
Demás
Formulario=objForm(strForm)
Terminar si
de función final
(strFile)
strFile=lcase(strFile)
Si NO objFile.exists (strFile) Entonces
Establecer archivo = nueva información de archivo
Demás
Establecer archivo = objFile (strFile)
Terminar si
Función final
Public Sub UploadInit (progressXmlPath, conjunto de caracteres)
Dim RequestData,sStart,Crlf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,theFile
Dim iFileSize,sFilePath,sFileType,sFormValue,sFileName
Atenuar iFindStart,iFindEnd
Dim iFormStart,iFormEnd,sFormName
Version="Barra de progreso de ancho de carga versión 1.0"
Establecer objForm=Server.CreateObject("Scripting.Dictionary")
Establecer objFile=Server.CreateObject("Scripting.Dictionary")
Si Request.TotalBytes<1 entonces salga de Sub
Establecer tStream = Server.CreateObject("adodb.stream")
Establecer SundyUpload_SourceData = Server.CreateObject("adodb.stream")
SundyUpload_SourceData.Type = 1
SundyUpload_SourceData.Modo =3
SundyUpload_SourceData.Open
DimTotalBytes
Tamaño de lectura de fragmento tenue
Dim DataPart, PartSize
Progreso obj tenue
TotalBytes = Solicitud.TotalBytes 'Tamaño total
ChunkReadSize = 64 * 1024 ' Tamaño del fragmento 64K
Bytes leídos = 0
xmlPath = progresoXmlPath
CharsetEncoding = juego de caracteres
Si CharsetEncoding = "" Entonces
CharsetEncoding = "utf-8"
Terminar si
Establecer objProgress = Nuevo progreso
objProgress.ProgressInit(xmlPath)
objProgress.UpdateProgress Totalbytes,0
'Lectura de bloque de bucle
Hacer mientras BytesRead <TotalBytes
'Leer en trozos
Tamaño de pieza = Tamaño de lectura de fragmento
Si PartSize + BytesRead > TotalBytes Entonces PartSize = TotalBytes - BytesRead
ParteDeDatos = Solicitud.BinaryRead(TamañoDeParte)
BytesRead = BytesRead + Tamaño de pieza
SundyUpload_SourceData.Escribir parte de datos
objProgress.UpdateProgress Totalbytes,BytesRead
Bucle
'SundyUpload_SourceData.Solicitud de escritura.BinaryRead(Solicitud.TotalBytes)
SundyUpload_SourceData.Position=0
RequestData =SundyUpload_SourceData.Leer
iFormInicio=1
iFormEnd = LenB(Solicitud de datos)
Crlf = chrB(13) & chrB(10)
sInicio = MidB(RequestData,1, InStrB(iFormStart,RequestData,Crlf)-1)
iInicio = LenB(sInicio)
iFormInicio=iFormInicio+iInicio+1
Mientras (iFormStart + 10) < iFormEnd
iInfoEnd = InStrB(iFormStart,RequestData,Crlf y Crlf)+3
tStream.Tipo = 1
tStream.Modo =3
tStream.Open
SundyUpload_SourceData.Position = iFormStart
SundyUpload_SourceData.CopyTo tStream,iInfoEnd-iFormStart
tStream.Posición = 0
tStream.Tipo = 2
tStream.Charset =Codificación de conjunto de caracteres
sInfo = tStream.ReadText
tStream.Cerrar
'Obtener nombre del elemento del formulario
iFormStart = InStrB(iInfoEnd,RequestData,sInicio)
iFindStart = InStr(22,sInfo,"nombre=""",1)+6
iFindEnd = InStr(iFindStart,sInfo,"""",1)
sFormName = lcase(Mid (sinfo,iFindStart,iFindEnd-iFindStart))
'Si es un archivo
Si InStr (45,sInfo,"filename=""",1) > 0 Entonces
Establecer theFile = nueva información de archivo
'Obtener el nombre del archivo
iFindStart = InStr(iFindEnd,sInfo,"nombre de archivo=""",1)+10
iFindEnd = InStr(iFindStart,sInfo,"""",1)
sFileName = Medio (sinfo,iFindStart,iFindEnd-iFindStart)
theFile.FileName=getFileName(sFileName)
theFile.FilePath=getFilePath(sNombreDeArchivo)
'Obtener tipo de archivo
iFindStart = InStr(iFindEnd,sInfo,"Tipo de contenido:",1)+14
iFindEnd = InStr(iFindStart,sInfo,vbCr)
theFile.FileType =Mid (sinfo,iFindStart,iFindEnd-iFindStart)
theFile.FileStart =iInfoEnd
theFile.FileSize = iFormStart -iInfoEnd -3
theFile.FormName=sNombredelformulario
Si NO es objFile.Exists (sFormName) Entonces
objFile.add sFormName, el archivo
Terminar si
Demás
'Si es un elemento de formulario
tStream.Tipo =1
tStream.Modo =3
tStream.Open
SundyUpload_SourceData.Position = iInfoEnd
SundyUpload_SourceData.CopyTo tStream,iFormStart-iInfoEnd-3
tStream.Posición = 0
tStream.Tipo = 2
tStream.Charset = Codificación Charset
sFormValue = tStream.ReadText
tStream.Cerrar
Si objForm.Exists (sFormName) Entonces
objForm(sFormName)=objForm(sFormName)&", "&sFormValue
Demás
objForm.Agregar sFormName,sFormValue
Terminar si
Terminar si
iFormInicio=iFormInicio+iInicio+1
Encaminarse a
SolicitarDatos=""
Establecer tStream = Nada
Subtítulo final
Subclase privada_Inicializar
Subtítulo final
Subclase privada_Terminar
Si Solicitud.TotalBytes>0 Entonces
objForm.RemoveAll
objFile.RemoveAll
Establecer objForm=Nada
Establecer objFile=Nada
SundyUpload_SourceData.Cerrar
Establecer SundyUpload_SourceData = Nada
Terminar si
Establecer objProgress = Nada
Establecer objFso = Server.CreateObject("Scripting.FileSystemObject")
Si objFso.FileExists (xmlPath) Entonces
objFso.DeleteFile(xmlPath)
Terminar si
Establecer objFso = Nada
Subtítulo final
Función privada GetFilePath (FullPath)
Si FullPath <> "" Entonces
GetFilePath = izquierda(RutaCompleta,InStrRev(RutaCompleta, ""))
Demás
GetFilePath = ""
Terminar si
Función final
Función privada GetFileName (ruta completa)
Si FullPath <> "" Entonces
GetFileName = mid(FullPath,InStrRev(FullPath, "")+1)
Demás
ObtenerNombreArchivo = ""
Terminar si
Función final
Fin de clase
Información de archivo
de clase
Dim Nombre de formulario, Nombre de archivo, Ruta de archivo, Tamaño de archivo, Tipo de archivo, Inicio de archivo
Subclase privada_Inicializar
Nombre de archivo = ""
RutaDeArchivo = ""
Tamaño de archivo = 0
Inicio de archivo = 0
Nombre del formulario = ""
Tipo de archivo = ""
Subtítulo final
Función pública Guardar como (ruta completa)
Dim dr,ErrorChar,i
Guardar como=Verdadero
'Respuesta.Escribir ruta completa & "........................<br>"
'NombreDeArchivo="ss.txt"
Si trim(fullpath)="" o FileStart=0 o fileName="" o right(fullpath,1)="/" entonces salga de la función
'Respuesta.Escribe "2........................<br>"
Establecer dr=CreateObject("Adodb.Stream")
modo dr.=3
dr.Tipo=1
dr.abierto
SundyUpload_SourceData.position=Inicio de archivo
SundyUpload_SourceData.copyto dr,FileSize
dr.SaveToFile Ruta completa,2
dr.Cerrar
Establecer dr=Nada
Guardar como=falso
Función final
Finalizar
clase Progreso
de clase
Dim objDom, xmlPath
Hora de inicio tenue
Subclase privada_Inicializar
subfinal
SubProgressInit público (xmlPathTmp)
Dim objRoot,objChild
Dim objPI
xmlPath = xmlPathTmp
Establecer objDom = Server.CreateObject ("Microsoft.XMLDOM")
Establecer objRoot = objDom.createElement ("progreso")
objDom.appendChild objRoot
Establecer objChild = objDom.createElement("totalbytes")
objChild.Text = "0"
objRoot.appendChild objChild
Establecer objChild = objDom.createElement("uploadbytes")
objChild.Text = "0"
objRoot.appendChild objChild
Establecer objChild = objDom.createElement("uploadpercent")
objChild.Text = "0%"
objRoot.appendChild objChild
Establecer objChild = objDom.createElement("velocidad de carga")
objChild.Text = "0"
objRoot.appendChild objChild
Establecer objChild = objDom.createElement ("tiempo total")
objChild.Text = "00:00:00"
objRoot.appendChild objChild
Establecer objChild = objDom.createElement ("tiempo izquierdo")
objChild.Text = "00:00:00"
objRoot.appendChild objChild
Establecer objPI = objDom.createProcessingInstruction("xml","version='1.0' encoding='utf-8'")
objDom.insertAntes de objPI, objDom.childNodes(0)
objDom.Guardar xmlPath
Establecer objPI = Nada
Establecer objChild = Nada
Establecer objRoot = Nada
Establecer objDom = Nada
Subtítulo final
SubActualizaciónProgreso(tBytes,rBytes)
Dim eTime, currentTime, velocidad, totalTime, leftTime, porcentaje
Si rBytes = 0 Entonces
horaInicio = Temporizador
Establecer objDom = Server.CreateObject ("Microsoft.XMLDOM")
objDom.load(rutaxml)
objDom.selectsinglenode("//totalbytes").text=tBytes
objDom.save(rutaxml)
Demás
velocidad = 0.0001
horaactual = Temporizador
eTime = hora actual - hora de inicio
Si eTime>0 Entonces velocidad = rBytes / eTime
tiempo total = tBytes/velocidad
leftTime = (tBytes - rBytes) / velocidad
porcentaje = Ronda(rBytes *100 / tBytes)
'objDom.selectsinglenode("//uploadbytes").text = rBytes
'objDom.selectsinglenode("//uploadspeed").text = velocidad
'objDom.selectsinglenode("//tiempototal").text = tiempototal
'objDom.selectsinglenode("//horaizquierda").text = horaizquierda
objDom.selectsinglenode("//uploadbytes").text = FormatFileSize(rBytes) & " / " & FormatFileSize(tBytes)
objDom.selectsinglenode("//uploadpercent").text = porcentaje
objDom.selectsinglenode("//uploadspeed").text = FormatFileSize(velocidad) & "/seg"
objDom.selectsinglenode("//tiempototal").text = SecToTime(tiempototal)
objDom.selectsinglenode("//tiempoizquierdo").text = SecToTime(tiempoizquierdo)
objDom.save(rutaxml)
Terminar si
final
SecToTime(seg)
Atenuar h:h = "0"
Atenuar m:m = "0"
Atenuar s:s = "0"
h = ronda(seg/3600)
m = redondo( (seg mod 3600) / 60)
s = redondo(seg mod 60)
Si LEN(h)=1 Entonces h = "0" & h
Si LEN(m)=1 Entonces m = "0" & m
Si LEN(s)=1 Entonces s = "0" & s
SecToTime = (h & ":" & m & ":" & s)
Función final
Función privada FormatFileSize (fsize)
Radio tenue,k,m,g,unitTMP
k = 1024
metro = 1024*1024
gramos = 1024*1024*1024
radio=1
Si Fix(fsize / g) > 0.0 Entonces
unidadTMP = "GB"
radio=g
De lo contrario, si corrige (fsize / m) > 0, entonces
unidadTMP = "MB"
radio=m
De lo contrario, si corrige (fsize / k) > 0, entonces
unidadTMP = "KB"
radio=k
Demás
unidadTMP = "B"
radio=1
Terminar si
Si radio = 1 entonces
FormatFileSize = fsize & " " & unidadTMP
Demás
FormatFileSize = FormatNumber(fsize/radio,3) & unitTMP
Terminar si
Función final
Subclase privada_Terminar
Establecer objDom = Nada
Subtítulo final
Fin de clase
'http://www.knowsky.com/
%>
<lenguaje de escritura="javascript">
//Iniciar barra de progreso
función startProgress(xmlPath){
mostrarProgreso();
setProgressDivPos();
setTimeout("DisplayProgressBar('" + xmlPath + "')",500);
}
función DisplayProgressBar(xmlPath){
var xmlDoc = nuevo ActiveXObject("Msxml2.DOMDocument.3.0");
xmlDoc.async = falso;
xmlDoc.load(xmlPath);
si (xmlDoc.parseError.errorCode!=0){
error var = xmlDoc.parseError;
alerta (error.motivo)
setTimeout("DisplayProgressBar('" + xmlPath + "')",1000);
devolver;
}
var root = xmlDoc.documentElement; //Nodo raíz
var totalbytes = root.childNodes(0).text;
var uploadbytes = root.childNodes(1).text;
var porcentaje = root.childNodes(2).text;
ProgressPercent.innerHTML = porcentaje + "%";
ProgressBar.style.width = porcentaje + "%";
uploadSize.innerHTML = subirbytes;
uploadSpeed.innerHTML = root.childNodes(3).text;
totalTime.innerHTML = root.childNodes(4).text;
leftTime.innerHTML = root.childNodes(5).text;
si (porcentaje<100){
setTimeout("DisplayProgressBar('" + xmlPath + "')",1000);
}
}
función mostrarProgreso(){
var objProgress = document.getElementById("Progreso");
objProgress.style.display = "";
}
función cerrarProgreso(){
var objProgress = document.getElementById("Progreso");
objProgress.style.display = "ninguno";
}
función setProgressDivPos(){
var objProgress = document.getElementById("Progreso");
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>
<tipo de estilo="texto/css">
.progreso {
posición: absoluta;
relleno: 4px;
arriba: 50;
izquierda: 400;
familia de fuentes: Verdana, Helvetica, Arial, sans-serif;
tamaño de fuente: 12px;
ancho: 250 px;
altura: 100 px;
antecedentes: #FFFFD1;
color: #3D2C05;
borde: 1px sólido #715208;
/*Propietario de Mozilla*/
-radio-borde-moz: 5px;
/*-moz-opacidad: 0,95 */
}
.tabla de progreso, .progreso td{
tamaño de fuente: 9 puntos;
}
.Bar{
ancho: 100%;
altura: 15 píxeles;
color de fondo:#CCCCCC;
borde: 1px inserto #666666;
margen inferior: 4px;
}
.Porcentaje de progreso{
tamaño de fuente: 9 puntos;
color: #000000;
altura: 15 píxeles;
posición: absoluta;
índice z: 20;
ancho: 100%;
alineación de texto: centro;
}
.Barra de progreso{
color de fondo:#91D65C;
ancho: 1px;
altura: 15 píxeles;
}
</estilo>
<div id="Progreso" estilo="display:none;" clase="progreso">
<div clase="barra">
<div id="ProgressPercent" class="ProgressPercent">0%</div>
<div id="Barra de progreso" class="Barra de progreso"></div>
</div>
<table border="0" cellspace="0" cellpadding="2">
<tr>
<td>Subido</td>
<td>:</td>
<td id="uploadSize"></td>
</tr>
<tr>
<td>Velocidad de carga</td>
<td>:</td>
<td id="uploadSpeed"> </td>
</tr>
<tr>
<td>Tiempo total requerido</td>
<td>:</td>
<td id="tiempototal"> </td>
</tr>
<tr>
<td>Tiempo restante</td>
<td>:</td>
<td id="horaizquierda"> </td>
</tr>
</tabla>
</div>
http://blog.csdn.net/delinsql/archive/2006/12/29/1467430.aspx