2011-06-30 16 views
9

Tengo un enlace de descarga en mi página, en un archivo que genero a petición del usuario. Ahora quiero mostrar el tamaño del archivo, para que el navegador pueda mostrar cuánto queda por descargar. Como solución, supongo que agregar un encabezado a la solicitud funcionaría, pero ahora no sé cómo hacerlo.Cómo agregar encabezados en HTTPContext Response en ASP.NET MVC 3?

Aquí está mi código try:

public FileStreamResult DownloadSignalRecord(long id, long powerPlantID, long generatingUnitID) 
     { 

       SignalRepository sr = new SignalRepository(); 
       var file = sr.GetRecordFile(powerPlantID, generatingUnitID, id); 
       Stream stream = new MemoryStream(file); 

       HttpContext.Response.AddHeader("Content-Length", file.Length.ToString()); 

       return File(stream, "binary/RFX", sr.GetRecordName(powerPlantID, generatingUnitID, id) + ".rfx"); 


     } 

Al revisar el violinista, que no mostraron la cabecera Content-Length. ¿Pueden ayudarme?

Respuesta

11

Trate HttpContext.Current.Response.AppendHeader("Content-Length", contentLength);

+0

El actual no existe en el interior HttpContext. –

+1

OK, luego omita 'Current'. Simplemente use 'AppendHeader' en lugar de' AddHeader' en su código original. – Mrchief

0

No está seguro de qué otra cosa puede estar equivocado, pero que el contenido de longitud debe ser el tamaño de la binario, no en la longitud de cadena.

+0

En realidad, la longitud debería ser la longitud de la secuencia, que sería la longitud del binario, ¿verdad? –

+0

@Mikael ........... Sí – heisenberg

3

¿Puedes probar el siguiente código y ver si funciona?

public FileStreamResult Index() 
{ 
    HttpContext.Response.AddHeader("test", "val"); 
    var file = System.IO.File.Open(Server.MapPath("~/Web.config"), FileMode.Open); 
    HttpContext.Response.AddHeader("Content-Length", file.Length.ToString()); 
    return File(file, "text", "Web.config"); 
} 

"funciona en mi máquina"

y he tratado sin la cabecera Content-length y violinista informa de una cabecera de longitud del contenido de todos modos. No creo que sea necesario.

+0

Su ejemplo funcionó, pero cuando genero mi archivo, no sucede. ;/ –

+0

¿Ha comprobado que la secuencia realmente contiene algo? 'sr.GetRecordFile (..)' devuelve un 'byte []', ¿verdad? –

0

Esto debería solucionarlo, ya que creo que no es necesario utilizar el FileStreamResult, cuando puede usar el byte[] directamente.

public FileContentResult DownloadSignalRecord(long id, long powerPlantID, long generatingUnitID) 
{ 
    SignalRepository sr = new SignalRepository(); 
    var file = sr.GetRecordFile(powerPlantID, generatingUnitID, id); 

    HttpContext.Response.AddHeader("Content-Length", file.Length.ToString()); 

    return File(file, "binary/RFX", sr.GetRecordName(powerPlantID, generatingUnitID, id) + ".rfx"); 
} 

Nota del FileContentResult tipo de retorno.

10

Intente utilizar

HttpContext.Response.Headers.add("Content-Length", file.Length.ToString()); 
Cuestiones relacionadas