Y la respuesta es el plugin Uploadify para JQuery el cual hace lo mismo en simples pasos. Aqui explicare como hacerlo.
Paso 1
Descargar los plugins Uploadify de JQuery y la libreria JQuery de los links de abajo.
Download JQuery
Download Uploadify
Una vez que hayan descargado necesitaran ubicar estos 4 archivos:
- jquery-1.3.2.min.js
- jquery.uploadify.js
- uploader.fla
- uploader.swf
<link rel="Stylesheet" type="text/css" href="CSS/uploadify.css" />
<script type="text/javascript" src="scripts/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="scripts/jquery.uploadify.js"></script>Agregamos un control tipo FileUpload al proyecto:
Agreguen el siguiente script al final del codigo html
<script type = "text/javascript">
$(window).load(
function() {
$("#<%=FileUpload1.ClientID %>").fileUpload({
'uploader': 'scripts/uploader.swf',
'cancelImg': 'images/cancel.png',
'buttonText': 'Browse Files',
'script': 'Upload.ashx',
'folder': 'uploads',
'fileDesc': 'Image Files',
'fileExt': '*.jpg;*.jpeg;*.gif;*.png',
'multi': true,
'auto': true
});
}
);
</script> Como puedes ver necesitamos especificar algunas configuraciones junto con el control FileUpload. La completa lista de configuraciones y sus descripciones estan disponibles aqui.
Algo importante que tenemos que hacer es apuntar es 'script': 'Upload.ashx' el cual manejara el FileUpload y guardara los archivos subidos al disco duro.
Abajo esta el codigo para el archivo Upload.ashx
<%@ WebHandler Language="C#" Class="Upload" %>
using System;
using System.Web;
using System.IO;
public class Upload : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
context.Response.Expires = -1;
try
{
HttpPostedFile postedFile = context.Request.Files["Filedata"];
string savepath = "";
string tempPath = "";
tempPath = System.Configuration.ConfigurationManager.AppSettings["FolderPath"];
savepath = context.Server.MapPath(tempPath);
string filename = postedFile.FileName;
if (!Directory.Exists(savepath))
Directory.CreateDirectory(savepath);
postedFile.SaveAs(savepath + @"\" + filename);
context.Response.Write(tempPath + "/" + filename);
context.Response.StatusCode = 200;
}
catch (Exception ex)
{
context.Response.Write("Error: " + ex.Message);
}
}
public bool IsReusable {
get {
return false;
}
}
}Como veran ese manejador simplemente acepta los archivos subidos y guarda el archivo en la carpeta llamada uploads la cual crearemos dentro de la ruta raiz de nuestro directorio web. El web.config modificaremos la parte del appsettings como esta abajo:
<appSettings>
<add key ="FolderPath" value ="uploads"/>
</appSettings >Y listo al presionar F5 les saldra asi:
Como ven en la figura estos archivos se suben automaticamente una vez que los seleccionamos si no queremos de esta forma cambiamos la configuracion auto a false. Pero en ese caso tendran que crear un trigger de subir archivos para interactuar con el usuario por medio de un boton.
Primero cambiamos la opcion a false aqui:
<script type = "text/javascript">
$(window).load(
function() {
$("#<%=FileUpload1.ClientID %>").fileUpload({
'uploader': 'scripts/uploader.swf',
'cancelImg': 'images/cancel.png',
'buttonText': 'Browse Files',
'script': 'Upload.ashx',
'folder': 'uploads',
'fileDesc': 'Image Files',
'fileExt': '*.jpg;*.jpeg;*.gif;*.png',
'multi': true,
'auto': false
});
}
);
</script> luego agregamos este codigo debajo de la etiqueta form que desencadenara la subida de archivos:
<a href="javascript:$('#<%=FileUpload1.ClientID%>').fileUploadStart()">Start Upload</a> Si el usuario no da click en el boton los archivos estarn en lista pendientes a ser subidos. Con este codigo se limpiara la lista una vez subidos los archivos:
<a href="javascript:$('#<%=FileUpload1.ClientID%>').fileUploadClearQueue()">Clear</a> aqui pueden descargar el codigo de la aplicacion espero les sea util =) MultipleFilesUpload.zip (57.08 kb)





hola gracias por tu post una pregunta en el 'Upload.ashx' para ke sirve hacer esto
ResponderEliminarcontext.Response.ContentType = "text/plain"
context.Response.Expires = -1
context.Response.Write((tempPath & "/") + filename)
context.Response.StatusCode = 200