I have a download link in my page, to a file I generate by the user request. Now I want to display the file size, so the browser can display how much is left to download. As a solution, I guess addin a Header to the request would work, but now I don't know how to do it.
Here is my try code:
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");
}
When I checked on fiddler, it didn't display the Content-Length header. Can you guys help me out?
Try HttpContext.Current.Response.AppendHeader("Content-Length", contentLength);
Try using
HttpContext.Response.Headers.add("Content-Length", file.Length.ToString());
Can you please try the following code and see if that works?
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");
}
"It works on my machine"
And I've tried without the Content-length
header and Fiddler reports a content length header anyway. I don't think it's needed.
This should solve it as I think there's no need to use the FileStreamResult
, when you can use the byte[]
directly.
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");
}
Note the FileContentResult return type.
Not sure what else may be wrong there, but that content-length should be the size of the binary, not the string length.