ASP.NET MVC FileStreamResult, fileDownloadName не используется
Следующее возвращает PDF, который браузер пытается отобразить в строке. Это работает правильно. Однако, если я попытаюсь загрузить файл, имя загрузки не будет "myPDF.pdf", а вместо этого ID на маршруте (myapp/controller/PDFGenerator/ID). Можно ли установить имя загрузки файла как "myPDF.pdf"?
public FileStreamResult PDFGenerator(int id)
{
MemoryStream ms = GeneratePDF(id);
byte[] file = ms.ToArray();
MemoryStream output = new MemoryStream();
output.Write(file, 0, file.Length);
output.Position = 0;
HttpContext.Response.AddHeader("content-disposition",
"inline; filename=myPDF.pdf");
return File(output, "application/pdf", fileDownloadName="myPDF.pdf");
}
Ответы
Ответ 1
Нет, это невозможно, если PDF файл отображается в строке. Вы можете достичь этого, если вы отправляете заголовок Content-Disposition с вложением:
public ActionResult PDFGenerator(int id)
{
Stream stream = GeneratePDF(id);
return File(stream, "application/pdf", "myPDF.pdf");
}
Также обратите внимание на то, как я удалил ненужный MemoryStream
, который вы использовали и загружал PDF в память, где вы могли напрямую передать его клиенту, что было бы намного более эффективным.
Ответ 2
Если вы используете FileStreamResult для загрузки файла, попробуйте использовать его в контроллере
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment; filename=FileName.pdf");
Ответ 3
Можно сделать id строкой, которая представляет имя файла без расширения.
public ActionResult PDFGenerator(string id, int? docid)
{
Stream stream = GeneratePDF(docid);
return new FileStreamResult(stream , "application/pdf");
}
Затем URL-адрес заканчивается следующим образом
..PDFGenerator/Document2?docid=15