none
Descargar Archivo desde ASP.NET C# RRS feed

  • Pregunta

  • Buen día.

    Espero me puedan ayudar con mi duda, estoy almacenando un archivo por medio de un arreglo de bytes, pero quisiera saber si alguien me puede orientar en como descargarlo, ya que con Response hace todo el proceso, convierte el binario, pero no descarga el archivo ni muestra la barra de descargas del navegador.

    De antemano gracias!

    El código con el que busco descargar es el siguiente (me baso a las experiencias y recomendaciones que algún conocido me dio).

    ublic void DescargarDocumento(int id)
            {
                
                using (SqlConnection con = new SqlConnection(Conn))
                {
                 
                    con.Open();
                    SqlCommand cmd = new SqlCommand("SELECT Archivo,Nombre,ContentType FROM INV_ENC  WHERE IDaplicativo = @ID", con);
                    cmd.CommandType = System.Data.CommandType.Text;
                    cmd.Parameters.AddWithValue("@ID",id);
                    SqlDataReader dr = cmd.ExecuteReader();
                    byte[] fileData = null;
                    string nombre = "";
                    string cont = "";
                    String extension = null;

                    if (dr.Read())
                    {
                        fileData = (byte[])dr.GetValue(0);
                        nombre = dr.GetString(1);
                        cont = dr.GetString(2);

                        switch (cont)
                        {
                            case "application/vnd.ms-word":
                                extension = ".doc";
                                break;

                            case "application/vnd.openxmlformats-officedocument.wordprocessingml.document":
                                extension = ".docx";
                                break;

                            case "application/vnd.ms-excel":
                                extension = ".xls";
                                break;
                            case "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":
                                extension = ".xlsx";
                                break;
                        }
                    }
                    String nomarchivo = nombre + extension;

                    Response.Clear();
                    Response.ClearHeaders();
                    Response.ContentType = cont;
                    Response.AddHeader("content-Disposition", nomarchivo);
                    Response.AddHeader("content-Length", fileData.Length.ToString());
                    Response.BinaryWrite(fileData);
                    Response.Flush();
                    Response.Close();




                }
              

              
            }


    miércoles, 10 de julio de 2019 14:18

Respuestas

  • hola

    como lanzas la llamada a la descarga? digo lo realizas con un simple click en un link o quizas usando javascript

    algo que puede afectar es si usas el UpdatePanel

    nos muestras el metodo DescargarDocumento() pero como se integra al aspx, porque ese codigo en realidad deberia estar en el Page_Load de la pagina, entonces cuando invocas al aspx pone en el response el archivo de descarga

    [ASP.NET] Grabar Archivo en base de datos

    analiza el articulo, alli explico como realizar la descarga de un archivo que esta en la db

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 12 de julio de 2019 12:59

Todas las respuestas

  • Hola, puedes mostrar lo que llevas implementado? 

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    miércoles, 10 de julio de 2019 23:37
    Moderador
  •  

    Hola  IsraelGonzalezA

     

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, para darte una mejor atención es necesario que nos brindes de favor un poco más de información acerca del problema que tienes ya sea colocando fragmento de codigo o form.

     

    Gracias por usar los foros de MSDN.

     

    Pablo Rubio

     ____

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. 

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.


    jueves, 11 de julio de 2019 15:47
    Moderador
  • Ya lo edito muchas gracias!
    jueves, 11 de julio de 2019 16:13
  • hola

    >>pero no descarga el archivo ni muestra la barra de descargas del navegador.

    barra de descarga no creo que muestre, simplemente deberia mostrarte el dialogo, pero si defines la extension y el content type de excel o word puede que segun el browser quiera visualizarlo embebido, sobre todo si es IE

    Ahora bien, si pones un breakpoint en el codigo, puede ver que llega la ejecucion al Response.BinaryWrite() ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 11 de julio de 2019 16:22
  • Si, si llega la ejecución al Response.BinaryWrite() pasa por el flush, el close y simplemente de ahí ya no realiza nada
    jueves, 11 de julio de 2019 19:03
  • Hola, me parece te falta agregar al final

    Response.End();


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    jueves, 11 de julio de 2019 21:58
    Moderador
  • hola

    como lanzas la llamada a la descarga? digo lo realizas con un simple click en un link o quizas usando javascript

    algo que puede afectar es si usas el UpdatePanel

    nos muestras el metodo DescargarDocumento() pero como se integra al aspx, porque ese codigo en realidad deberia estar en el Page_Load de la pagina, entonces cuando invocas al aspx pone en el response el archivo de descarga

    [ASP.NET] Grabar Archivo en base de datos

    analiza el articulo, alli explico como realizar la descarga de un archivo que esta en la db

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 12 de julio de 2019 12:59
  • La llamada al método de DescargarDocumento() la hago por medio de un botón, este botón, manda a llamar un js que envía el id al controlador para que se ejecute el método.

    Leeré el articulo, muchas Gracias!!

    viernes, 12 de julio de 2019 14:12
  • Hola, me parece te falta agregar al final

    Response.End();


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    Hola, has implementado esto que te comento? 

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    viernes, 12 de julio de 2019 14:23
    Moderador
  • Lo acabo de implementar, solo que no había respondido, hasta hacerlo, pero de igual manera no descarga el archivo.
    viernes, 12 de julio de 2019 14:29