none
Descargar fichero y subproceso anulado RRS feed

  • Pregunta

  • Buenas tardes,

    en mi proyecto de asp estoy intentando realizar una funcion para descargar los ficheros de un directorio del servidor, el directorio se crea de forma automatica desde la pagina y funciona bien, el caso es que cuando ubico algun documento en ese directorio y quiero descargarlo a local me da un error de subproceso anulado.

    El codigo que tengo para esta descarga es el siguiente:

    string sFilePath = Path.Combine(Server.MapPath("~/Documentacion/Personal"), personaNif.Text);
                    string sFile = sFilePath + "/" + sFileName;
                    FileInfo ficheroD = new FileInfo(sFile);
    
                    Response.Clear();
                    Response.AddHeader("Content-Disposition", "attachment; filename=" + sFileName);
                    Response.AddHeader("Content-Length", ficheroD.Length.ToString());
                    Response.ContentType = "application/octet-stream";
                    Response.WriteFile(sFile);
                    Response.End();
    

    El caso es que la variable ficheroD si contiene el fichero ( en mis pruebas locales es D:\\proyectos\miweb\Documentacion\Personal\00001-A\

    pero cuando quiero descargarlo no hace nada. con este codigo exacto me lanza una excepcion de subproceso anulado y si le comento la ultima linea  // Response.End(); no da la excepcion pero no me realiza ninguna descarga.

    En el server ISS tampoco me funciona este codigo para la descarga. ¿ Podeis echarme un cable ?

    Gracias

    jueves, 1 de octubre de 2015 14:37

Todas las respuestas

  • hola

    en que evento ubicas ese codigo ?

    de casualidad en la pagina usas UpdatePanel ?

    la descarga cuando tiene que enviarse en el Response suelo lanzarla en un popup, o sea uso window.open() para que lance una pagina en donde en el Page_Load envia el documento para su descarga

    de esta forma no interfieres con el flujo del request de la pagina original

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 1 de octubre de 2015 15:04
  • Si, en la pagina uso varios update panel, concretamente en esa parte si se usa UpdatePanel.

    El evento se lanza desde un gridview, desde un template de tipo ImageButon, lo que hago es mostrar un grid con un icono segun el tipo de fichero y el nombre del fichero y cuando se pincha en el icono se lanza un evento que realiza lo siquiente:

    protected void VerDocumento(object sender, GridViewCommandEventArgs e)
            {
                if (e.CommandName == "VerDoc")
                {
                    Descargar(e.CommandArgument.ToString());
                }
            }


    Te pongo tambien el codigo del DataGrid, por si sirve de algo, en teoria el metodo se ejecuta correctamente ya que como decia cuando examino el FileInfo, llega el nombre del fichero correctamente.

    <asp:GridView ID="gvListaDocumentos" runat="server" CellSpacing ="10" AutoGenerateColumns="false"
                                             onrowdatabound="ponerIconos" OnRowCommand="VerDocumento">
                                            <Columns>
                                                <asp:TemplateField>
                                                    <ItemTemplate>
                                                        <asp:CheckBox ID="chkRow" runat="server" />
                                                    </ItemTemplate>
                                                </asp:TemplateField>
    
                                                <asp:TemplateField>
                                                    <ItemTemplate>
                                                        <asp:ImageButton runat="server" ID="imgIcono" Width="20" Height="20" 
                                                            CommandName="VerDoc" CommandArgument='<%# Eval("Ruta") %>' />
                                                    </ItemTemplate>
                                                </asp:TemplateField>
                                                
                                                <asp:BoundField DataField="Nombre"/>
                                            

    Gracias 

    jueves, 1 de octubre de 2015 15:22
  • hola

    claro el tema es que el update panel y cambiar el Response no se llevan muy bien

    como comente en ese boton deberias usar codigo javascript que lance una pagina que envie al cliente el archivo para su descarga

    pero no puedes cambiar el Response usando el UpdatePanel

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 1 de octubre de 2015 16:13
  • He intentado seguir tus indicaciones, pero no soy capaz de lograrlo, tampoco he encontrado ningún ejemplo, todos usan el response de la forma habitual.

    Entiendo que este mismo problema lo tendré con otra consulta a la que me respondiste para subir un fichero y que también tengo dentro del updatepanel y es que no los puedo evitar.

    ¿ no tendrás algún ejemplo sencillo por ahí con el que pueda orientarme ?

    Gracias

    jueves, 1 de octubre de 2015 16:55
  • has intentado con esto

    <Triggers>
                <asp:PostBackTrigger ControlID="btnExportar" />
    </Triggers>

     </asp:UpdatePanel>

    antes de finalizar el updatePanel

    jueves, 16 de abril de 2020 1:03