Saltar al contenido

Response.TransmitFile No se descarga y no genera errores

El tutorial o código que encontrarás en este post es la solución más fácil y efectiva que encontramos a tus dudas o problema.

Solución:

Es porque está eliminando el archivo antes de que pueda enviarse.

Desde MSDN – Método HttpResponse.End

Envía toda la salida actualmente almacenada en búfer al cliente, detiene la ejecución de la página y genera el evento EndRequest.

Intente poner su System.IO.File.Delete(mappedPath); línea después de la respuesta.End(); en mi prueba en ese momento parecía estar funcionando.

Además, podría ser una buena idea verificar primero si el archivo existe, no puedo ver ningún archivo. Existe allí, no quiero ninguno null excepciones de referencia y para establecer Content-Length.

EDITAR: aquí está el código que usé en un proyecto en el trabajo hace un tiempo, podría ayudarlo un poco.

// Get the physical Path of the file
string filepath = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath + folder + filename;

// Create New instance of FileInfo class to get the properties of the file being downloaded
FileInfo file = new FileInfo(filepath);

// Checking if file exists
if (file.Exists)
                            
    // Clear the content of the response
    Response.ClearContent();

    // LINE1: Add the file name and attachment, which will force the open/cance/save dialog to show, to the header
    Response.AddHeader("Content-Disposition", String.Format("attachment; filename=0", file.Name));

    // Add the file size into the response header
    Response.AddHeader("Content-Length", file.Length.ToString());

    // Set the ContentType
    Response.ContentType = ReturnFiletype(file.Extension.ToLower());

    // Write the file into the response (TransmitFile is for ASP.NET 2.0. In ASP.NET 1.1 you have to use WriteFile instead)
    Response.TransmitFile(file.FullName);

    // End the response
    Response.End();

    //send statistics to the class

Y aquí está el método de tipo de archivo que utilicé

//return the filetype to tell the browser. 
//defaults to "application/octet-stream" if it cant find a match, as this works for all file types.
public static string ReturnFiletype(string fileExtension)

    switch (fileExtension)
    
        case ".htm":
        case ".html":
        case ".log":
            return "text/HTML";
        case ".txt":
            return "text/plain";
        case ".doc":
            return "application/ms-word";
        case ".tiff":
        case ".tif":
            return "image/tiff";
        case ".asf":
            return "video/x-ms-asf";
        case ".avi":
            return "video/avi";
        case ".zip":
            return "application/zip";
        case ".xls":
        case ".csv":
            return "application/vnd.ms-excel";
        case ".gif":
            return "image/gif";
        case ".jpg":
        case "jpeg":
            return "image/jpeg";
        case ".bmp":
            return "image/bmp";
        case ".wav":
            return "audio/wav";
        case ".mp3":
            return "audio/mpeg3";
        case ".mpg":
        case "mpeg":
            return "video/mpeg";
        case ".rtf":
            return "application/rtf";
        case ".asp":
            return "text/asp";
        case ".pdf":
            return "application/pdf";
        case ".fdf":
            return "application/vnd.fdf";
        case ".ppt":
            return "application/mspowerpoint";
        case ".dwg":
            return "image/vnd.dwg";
        case ".msg":
            return "application/msoutlook";
        case ".xml":
        case ".sdxl":
            return "application/xml";
        case ".xdp":
            return "application/vnd.adobe.xdp+xml";
        default:
            return "application/octet-stream";
    

Me topé con esta publicación en mi búsqueda y noté que no era útil para decirnos por qué UpdatePanel causó el problema en primer lugar.

UpdatePanel es una devolución de datos asincrónica y Response.TransmitFile necesita una devolución de datos completa para funcionar correctamente.

El control que activa la devolución de datos asincrónica debe convertirse en un activador en UpdatePanel:

        


Gracias por el seguimiento de cuál era su problema. Pasé horas tratando de averiguar por qué no se lanzaba ningún código de error a pesar de que no pasó nada. Resulta que mi AJAX UpdatePanel se interpuso misteriosa y encubiertamente.

Finalizando este artículo puedes encontrar las ilustraciones de otros desarrolladores, tú también eres capaz dejar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *