2010-01-21 25 views
8

Tengo un pdf 5Mb en el servidor dowloading este archivo usando una writefile me da una descarga de 15 Mb, en tanto que la TransmitFile da el tamaño del archivo 5Mb correcta ...C# Response.WriteFile vs Response.TransmitFile tamaño del archivo emite

Es esto debido a algún tipo de descompresión en la memoria en el servidor para el archivo de escritura? Sólo me pregunto si alguien había visto que ocurra lo mismo ...

(ps sólo se nota que ya que fuimos a iis7 ??) código

siendo ...

if (File.Exists(filepath)) 
{ 
    HttpContext.Current.Response.Clear(); 
    HttpContext.Current.Response.ContentType = "application/octet-stream"; 
    HttpContext.Current.Response.AddHeader("content-disposition","attachment;filename=\""+Path.GetFileName(filepath)+"\""); 
    HttpContext.Current.Response.AddHeader("content-length", new FileInfo(filepath).Length.ToString()); 

    //HttpContext.Current.Response.WriteFile(filepath); 
    HttpContext.Current.Response.TransmitFile(filepath); 

    HttpContext.Current.Response.Flush(); 
    HttpContext.Current.Response.Close(); 
} 
+0

Acabo de tener el mismo error. La configuración de compresión en IIS no la afecta. – geofftnz

Respuesta

7

TransmitFile - escribe el archivo especificado directamente a una secuencia de salida de respuesta HTTP sin almacenarlo en la memoria.

WriteFile - Escribe el archivo especificado directamente en una secuencia de salida de respuesta HTTP.

Diría que la diferencia se produce porque el archivo de transmisión no lo almacena en búfer. El archivo de escritura utiliza el almacenamiento en búfer (Afiak), básicamente almacena temporalmente los datos antes de transmitirlos, por lo que no puede adivinar el tamaño exacto del archivo porque lo escribe en fragmentos.

2

Puede entender por la siguiente definición.

Response.TransmitFile VS Response.WriteFile:

  • TransmitFile: Este método envía el archivo al cliente sin cargar a la memoria de la aplicación en el servidor. Es la forma ideal de usarlo si el tamaño del archivo que se descarga es grande.

  • WriteFile: Este método carga el archivo que se está descargando a la memoria del servidor antes de enviarlo al cliente. Si el tamaño del archivo es grande, es posible que el proceso de trabajo ASPNET posible que se reinició *

Referencia: -. TransmitFile VS WriteFile

Cuestiones relacionadas