post icon

Descargar ficheros con Asp.Net

Muchas veces queremos que nuestra WebApp pueda descargar ficheros que utilizará el usuario, por ejemplo archivos .pdf, .xls, .doc, .exe y no deseamos que el browser los abra si está configurado de ésta manera (lo está así en la mayoría de los navegadores).

Es bastante práctico según el tipo de aplicación que estemos creando y muy fácil de implementarlo por suerte. Para comprender el concepto insertaremos un ImageButton dentro de la página y en su evento clic escribiremos el código de abajo.

1
2
3
<asp:ImageButton ID="btnDescargarAlgo" runat="server" Height="80px"
ImageUrl="~/images/boton.jpg" onclick="btnDescargarAlgo_Click"
Width="80px" />

Y código del lado servidor será este:

1
2
3
4
5
6
7
8
9
10
11
12
// Limpiamos la salida
Response.Clear();
// Con esto le decimos al browser que la salida sera descargable
Response.ContentType = "application/octet-stream";
// esta linea es opcional, en donde podemos cambiar el nombre del fichero a descargar (para que sea diferente al original)
Response.AddHeader("Content-Disposition", "attachment; filename=binaries/devtroce.exe");
// Escribimos el fichero a enviar 
Response.WriteFile("binaries/devtroce.exe");
// volcamos el stream 
Response.Flush();
// Enviamos todo el encabezado ahora
Response.End();
12 Septiembre 2010

Comentarios desde Facebook:

  1. avatar
    Lupita MC MEXICO Mozilla Firefox Windows
    2 Mayo 2016 at 13:04 #

    Hola,

    EL código me funciona muy bien en mi máquina localmente, pero ya en el servidor el código no funciona, no ejecuta el evento, no sé si se deba configurar algo, o haga falta darle otra instrucción.

    ¿Alguién podría ayudarme por favor?

  2. avatar
    RCuello Google Chrome Windows
    7 Enero 2013 at 11:38 #

    protected void btndescargar_Click(object sender, EventArgs e)
    {
    //Limpio la salida.
    Response.Clear();
    //Una variable string para pasar al header.
    string FileName = “/pdf/iis 7.0.pdf”;

    //El header esto es opcional.
    Response.AddHeader(“Content-Disposition”, “Attachment; filename=\””+FileName+””);
    //Le digo el fichero a descargar, en este caso en mi proyecto le cree una carpeta llamda pdf y dentro de esta un documento pdf llamado iis 7.0.pdf debe de ir con todo y extencion y no te olvides de las barras invertida que tiene este ejemplo, si no te funcion por una virguliña ~ antes de la primera barra ej. ~/pdf/iis 7.0.pdf
    //Response.WriteFile(“/pdf/iis 7.0.pdf”);
    //Le ago un bolcad al fichero.
    Response.Flush();
    //Ruta del archivo donde se encuenta, es igual al de arriba solo que este el el fichero en si, lo anerior es para tomar el nombre y ponerlo la ventana de descarga que aparece asi no tienes que escribirlo tu, o el susuario.
    Response.TransmitFile(“/pdf/iis 7.0.pdf”);
    //Le envio todo al encabezado.
    Response.End();
    }

  3. avatar
    Angela Google Chrome Windows
    20 Diciembre 2012 at 18:14 #

    Hola,
    Yo tengo que descargar un pdf pero desde una URL, por que el archivo se encuentra en una pagina por ejemplo esta
    http://www.fna.gov.co/wps/portal/inicioFNA/Prensa/PeriodicoInstitucional

    Y quiero descargar este archivo a mi servidor.

  4. avatar
    JOSH COSTA RICA Mozilla Firefox Windows
    4 Abril 2012 at 13:26 #

    Espero te ayude:

    Response.Clear()
    Response.AddHeader(“Content-Disposition”, “attachment; filename=”NombreArchivo.ext”)
    Response.Flush()
    Response.TransmitFile(pathFile)
    Response.End()

    • avatar
      nasarca COSTA RICA Google Chrome Windows
      29 Agosto 2012 at 11:02 #

      :mrgreen: Perfecto hermano gracias!!

      aquí les dejo mi aporte:

      Response.Clear();
      // Response.AddHeader(“Content-Disposition”, “attachment; filename=\”NombreArchivo.ext\””);

      Response.AddHeader(“Content-Disposition”, “attachment; filename=\”” + filename + “\””);
      Response.Flush();
      Response.TransmitFile(pathFile);
      Response.End();

      • avatar
        JOSE Mozilla Firefox Windows
        23 Noviembre 2012 at 21:18 #

        Cual es la diferencia entre

        Este:

        Response.AddHeader(“Content-Disposition”, “attachment; filename=\”NombreArchivo.ext\””);

        o
        Este:

        Response.AddHeader(“Content-Disposition”, “attachment; filename=\”” + filename + “\””);

        • avatar
          nasarca COSTA RICA Safari Mac OS
          23 Noviembre 2012 at 21:27 #

          Hola , el primero si quieres “quemar” o indicar directamente el nombre del archivo.

          El segundo trabaja con una variable o bien parámetro para que este nombre se pueda indicar dinámicamente.

          Saludos

  5. avatar
    Xias SPAIN Internet Explorer Windows
    25 Octubre 2010 at 13:20 #

    Hola,
    ya monté las páginas, el problema está en que cuando visualizo esta página desde una blackberry me da este error (esta página debe verse bien en este dispositivo)…
    Muchas gracias, saludos.

    ‰PNG IHDR @ ð þO*< tEXtSoftware Adobe ImageReadyqÉeuã$þdä3ÑNH†`ð8ˆ¾-QGGÈ—Æ rÔÒÿ}põƇûçÅHöåÞ×%>ûDøžÙåð ¾{ü”Ù_ €±Ø;ýãù>¿¶7ŒqpnüŽ”|_Üvf{âü„]Ï+ á!â¸ÐIɤ¿ˆÑ¯ÞXã7xºâ“:Lp “.F{$ôK¾ â{CPƒ;F÷FEžþä³_™þs0T\bΠ¿qÑR·†m®G;?ù”J `’0’6ý9.ÞêK$¥Ý”µ‚õÍù>Qi$Oöe‡-§¡&²=J|-NfTN>Q‚肃%ÏÈÊXÓ4‡.Tæs‡âÊ·„&d`ÄA%!µøˆ.GWh™ –uJä{f‡ Eî_J)_’ (®{C“‡n”lR!kBÍ2ÉEâ{ß/1e.ì icU3Ûß?°›ƒÆjf‰úû{¯*Ñ#!n8¹RöÌQ¼ÙoÿäA…G#•)ÆNʺ†¢˜þ\U;á„åK),åoFú âØ©òmC’¡8!Ç8ÍlEWö•Ó¸³±¦Š.êè ÀK—ÍDŽ¡Ö¹WìÀuäIXØQ’Š¬Cªo´]‰K½Û¢ª&õ”2èBÉÕRëöçbQÕëTjœ+‡B-^ap–³à8Œ³íÐ HóJSaV¦¯:·à= >è˜w]˜ý¡.-ya0‹÷ü-ûÙ÷ý«–äÂù5®Ž~ •¸#àÙ:å@HÇöoue¨0@a}B”Æ´gÍ£y¶N…žpÇø ¾ì¾3Š2 ü^ê\]”I¢Óa” Á‰à QP–n »òÖ‘3’ý‰Ê¿´À¿õ癟¶Ë!®@ù ­¸ô¦Q 8Es‹ „”ÄQ § r¡;!Ý”=¶ßüo”j^w’jeRNñFZ2FÜè )æóC•ÌŒa OÓQñWŠ™=´¸ÀVˆ.ÃZ`B}’$@Ù@……. y sigue…

  6. avatar
    GeekZero UNITED STATES Google Chrome Windows
    19 Octubre 2010 at 14:35 #

    Hola xias? trabajas con PHP, Java, otro? en el postback del boton solo tienes que escribir el codigo que ves aqui, obviamente cambiale la ruta del fichero para que te funcione..

  7. avatar
    Xias SPAIN Internet Explorer Windows
    19 Octubre 2010 at 13:29 #

    Hola,
    Necesito justo esto pero el problema es que no tengo ni idea de asp/x por lo que no se como implementarlo.
    ¿Podrias dejarme un enlace en el que pudiera descargarme un ejemplo de como hacerlo?
    Muchisimas gracias, saludos

    • avatar
      RCuello Google Chrome Windows
      7 Enero 2013 at 11:40 #

      protected void btndescargar_Click(object sender, EventArgs e)
      {
      //Limpio la salida.
      Response.Clear();
      //Una variable string para pasar al header.
      string FileName = “/pdf/iis 7.0.pdf”;

      //El header esto es opcional.
      Response.AddHeader(“Content-Disposition”, “Attachment; filename=\””+FileName+””);
      //Le digo el fichero a descargar, en este caso en mi proyecto le cree una carpeta llamda pdf y dentro de esta un documento pdf llamado iis 7.0.pdf debe de ir con todo y extencion y no te olvides de las barras invertida que tiene este ejemplo, si no te funcion por una virguliña ~ antes de la primera barra ej. ~/pdf/iis 7.0.pdf
      //Response.WriteFile(“/pdf/iis 7.0.pdf”);
      //Le ago un bolcad al fichero.
      Response.Flush();
      //Ruta del archivo donde se encuenta, es igual al de arriba solo que este el el fichero en si, lo anerior es para tomar el nombre y ponerlo la ventana de descarga que aparece asi no tienes que escribirlo tu, o el susuario.
      Response.TransmitFile(“/pdf/iis 7.0.pdf”);
      //Le envio todo al encabezado.
      Response.End();
      }

Responder