Asp.net-Mvc

ASP.NET MVC FileStreamResult,未使用 fileDownloadName

  • February 13, 2018

以下返回瀏覽器嘗試直接內聯顯示的 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");
}

不,這對於內聯顯示的 PDF 是不可能的。如果您將 Content-Disposition 標頭作為附件發送,則可以實現此目的:

public ActionResult PDFGenerator(int id)
{
   Stream stream = GeneratePDF(id);
   return File(stream, "application/pdf", "myPDF.pdf");
}

另請注意,我如何刪除MemoryStream您正在使用的不必要的內容並將 PDF 載入到記憶體中,您可以直接將其流式傳輸到客戶端,這樣效率會高得多。

如果您使用 FileStreamResult 下載文件,請嘗試在控制器中使用它

Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment; filename=FileName.pdf");

引用自:https://stackoverflow.com/questions/15862683