FileUpload con jQuery y ASP.NET
Publicado por Julio Avellaneda en 05/07/2011
En los dos artículos anteriores, vimos como poder realizar la subida de archivos en primera medida con el FileUpload estándar que ofrece ASP.Net (míralo acá) y como segunda parte como realizar la misma acción pero esta vez utilizando el FileUpload del AjaxControlToolkit (revísalo acá).
Y hoy vamos a ver como tener un FileUpload pero esta vez utilizando jQuery.
Existe gran cantidad de plugins de jQuery que permiten tener un control para realizar la subida de archivos, pero en este ejemplo voy a utilizar el Multiple File Upload.
Dicho plugin tiene varias características interesantes, las que más me gustan son:
- Permite subir múltiples archivos.
- Permite especificar los archivos que es posible subir.
- Limitar el número de archivos.
Como usar el plugin:
- Establecer la propiedad class=”multi”
- Para limitar el número de archivos se debe utilizar la propiedad maxlength=”número de archivos”
- Para definir el tipo de archivo permitido utilizar la propiedad accept=”tipos de archivos”
Ahora nuestro código HTML sería:
<asp:FileUpload ID="uploadFile1" runat="server" class="multi" maxlength="3" accept="gif|jpg|png" /> <asp:Button ID="btnSubir" runat="server" Text="Subir Archivos" /> <asp:Label ID="lblMensaje" runat="server" ForeColor="Red"></asp:Label>
Como se puede ver se hace uso del control FileUpload, se está definiendo la class=”multi”, un máximo de 3 archivos y se esta limitando a subir archivos que sean únicamente imágenes.
Ahora el código del botón que implementará la lógica para la subida de los archivos:
Dim files As HttpFileCollection = Request.Files For i As Integer = 0 To files.Count - 1 Dim postedFile As HttpPostedFile = files(i) If postedFile.ContentLength > 0 Then postedFile.SaveAs(Server.MapPath("files\") & Path.GetFileName(postedFile.FileName)) lblMensaje.Text="Archivos subidos correctamente." End If Next i
Primero se obtiene una colección de todos los archivos a cargar, luego se recorre mediante un ciclo for cada archivo de la colección y finalmente se utiliza el método SaveAs para guardar el archivos.
Finalmente al seleccionar varios archivos en pantalla estos se visualizarán en pantalla y podrán ser eliminado en caso de no ser el archivo que se quiere subir:
Como se ha podido ver, este plugin es bastante fácil de utilizar y permite ampliar las capacidades del FileUpload ofrecido por ASP.NET.
Como siempre les dejo el código tanto en VB como C#.






PP escribió
Muchisimas gracias !! Buenísima solución !!
rocio escribió
hola…disculpa por molestar pero esto me urge mucho…en el boton me marca error en
Dim postedFile As HttpPsotedFile = file (i)
if postedFile. ContentLength > 0 then
postedFile.SaveAs (Server.MapPath(file\) yyyyyyyyy todo lo demas
nos e porke merca error …si me puede contestar pronto porfas
Julio Avellaneda escribió
Hola, de casualidad estas usando algun updatepanel? ademas dos opcioens mas:
1. coloca un try-catch para manejar el error
2. verifica q la variable files si tenga datos (esto puede deberse si usas algun updatepanel), pq si se usa y es nothing te marcara error, avisame !
Marticore escribió
Buenas, como funcionaria si estuviera usando un updatepanel en otra parte de mi documento?, porqu een la parte de
HttpFileCollection files = Request.Files;
for (int i = 0; i 0)
{
no encuentra nada :s
gracias.
Julio Avellaneda escribió
hola, si estas usando un update panel tienes tres opciones:
1. añadir el fileupload que tienes a la coleccion de triggers de tu updatepane
2. usar el fileupload de ajaxcontroltoolkit: http://julitogtu.wordpress.com/2011/05/02/fileupload-ajaxcontroltoolkit/
3. usar un control de terceros: http://fileuploadajax.subgurim.net/
cualquier duda adicional con gusto
mariobot escribió
Que buen articulo, como siempre muy acertadas tus recomendaciones y tips para mejorar la experiencia de usuario en nuestras aplicaciones.
Julio Avellaneda escribió
gracias bro!!
jesusalexis escribió
interesante….pero una consulta..y como hacemos para mostrar esos archivos…k subimos?….si es .pdf o .doc como los mostramos??
Julio Avellaneda escribió
Hola, el tema de mostrar los archivos es algo complicado, a menos q sepas excatamente q tuipo de archivo vas a mostrar, me explic si es una imagen la puedes mostrar es un control image facilemtne, pero para el tema de archivos de la suite de office realmente mostrar el archivo te sera muy dificuil, deberias es tener un link para hbailitar la descagar del archivo.
murel escribió
No puedo ejecutar tu proyecto de ejemplo. No me reconoce una propiedad targetframework del web.config. Saludos
Julio Avellaneda escribió
Hola, alli se define el framework con el cual estas trabajando.
murel escribió
Defino el 3.5 pero no me funciona.
Carlos escribió
hola sera posible que permita seleccionar varias fotos y no solo de una en una?, muchas gracias
Saludos
Julio Avellaneda escribió
Hola Carlos, la verdad no lo he probado, dejame darle un ojo en estos días
murel escribió
Ademas de que no compila por el class=”multi”
Julio Avellaneda escribió
Hola, no creo q el error sea por eso, el usa class solo permite definir la clase css que se va a utilizar, inlcuos es posible asignar nombres de clase q no existan, puede que te lo marque como advertencia pero no como error.
murel escribió
Tenés razón, no miré correctamente. Gracias
Julio Avellaneda escribió
Un gusto amigo, cualquier cosa con gusto!
Edward Ocando escribió
Y donde entra jquery en todo esto…? En todo tu explicación, aunque funciona muy bien, no referencia referencia a jquery por ningun lado, todo esto funciona normalmente con asp net, pero aqui no hay nada de jquery….
Julio Avellaneda escribió
Edward, si realizas la descarga del ejemplo verás que referencio dos scripts:
el multifle.js permite seleccionar varios archivos.
Abel Amaro Julian escribió
Muchs gracias me sirvio de mucho =)
Julio Avellaneda escribió
Que bueno amigo, saludos!
Arturo Suarez escribió
Hola, cuando implemento el fileupload con los js funciona muy bien, pero al colocar otras librerias de jquery (las ultimas versiones) que necesito de pronto la página sale completamente vacía, quedando solo la información de las páginas maestras. ¿Que puedo hacer al respecto? Muchisimas gracias por tu post.
Julio Avellaneda escribió
Hola amigo, la verdad es bn raro lo que pasa, se me ocurre que puedes revisar con firebug si tienes algun error o algun conflicto, alli puedes ver errores, warning etc, ademas te pregunto, cuando dices otras librerias de jquery te refieres a la ultima version de jquery o a plugins? quedo atento, saludos.