Ответ 1
Попробуйте использовать
HttpContext.Response.Headers.Add("Content-Length", file.Length.ToString());
У меня есть ссылка для загрузки на моей странице, в файл, который я генерирую по запросу пользователя. Теперь я хочу отобразить размер файла, поэтому браузер может отображать, сколько осталось загрузить. В качестве решения я предполагаю, что добавление заголовка в запрос будет работать, но теперь я не знаю, как это сделать.
Вот мой код:
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");
}
Когда я проверил скрипт, он не отобразил заголовок Content-Length. Можете ли вы, ребята, помочь мне?
Попробуйте использовать
HttpContext.Response.Headers.Add("Content-Length", file.Length.ToString());
Попробуйте HttpContext.Current.Response.AppendHeader("Content-Length", contentLength);
Вы можете попробовать следующий код и посмотреть, работает ли это?
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");
}
"Он работает на моей машине"
И я пробовал без заголовка Content-length
, и Fiddler в любом случае сообщает заголовок длины контента. Я не думаю, что это необходимо.
Это должно решить его, поскольку я думаю, что нет необходимости использовать FileStreamResult
, когда вы можете напрямую использовать byte[]
.
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");
}
Обратите внимание на тип возвращаемого FileContentResult.
Не уверен, что там может быть неправильным, но длина содержимого должна быть размером двоичного файла, а не длиной строки.
Попробуйте использовать HttpContext.Current.Response.AppendHeader("Content-Length", contentLength);