2016-10-14 55 views
0

ASP.NET MVC 4控制器returs PDF指定名稱:如何從瀏覽器中保存的PDF

public ActionResult Pdf() { 

     byte[] result = CreatePDF(); 
     var ms = new MemoryStream(result); 
     return new FileStreamResult(ms, "application/pdf"); 
    } 

結果顯示在Chrome瀏覽器窗口。 如果用戶右鍵單擊pdf並選擇另存爲Chrome提供Pdf.pdf作爲文件名來保存。

如何指定其他默認文件名稱,如Order 123.pdf

Chrome開發者工具顯示文件NIME不響應speficied:

Cache-Control:private, s-maxage=0 
Content-Length:30814 
Content-Type:application/pdf 
Date:Fri, 14 Oct 2016 19:18:09 GMT 
Server:Microsoft-IIS/7.5 
X-AspNet-Version:4.0.30319 

回答

1

嘗試使用File方法。

public FileResult Pdf() 
{ 
    byte[] result = CreatePDF(); 
    string fileName = "Order 123.pdf"; 
    return File(result, "application/pdf", fileName); 
} 

沒有必要在MemoryStream

+0

在這種情況下,pdf不會在Chrome中顯示。只顯示下載的文件圖標。如何強制瀏覽器立即顯示PDF,在這種情況下沒有額外點擊下載的文件? – Andrus

+1

@安德魯斯,根據[回答在SO](http://stackoverflow.com/a/19412687/1380428)你需要設置'內容處置:內聯' –

0

FileStreamResult包裹resultFileDownloadName屬性,它可以設置

public ActionResult Pdf() 
{ 
    byte[] result = CreatePDF(); 
    var ms = new MemoryStream(result); 
    var fs = new FileStreamResult(ms, "application/pdf") {FileDownloadName = "Hello.pdf"}; 
    return fs; 
} 

這正是發生在你調用ControllerBase.File方法的overload which takes the file name

public ActionResult Pdf() 
{ 
    byte[] result = CreatePDF();  
    return File(result ,"application/pdf","Hello.pdf"); 
} 
+0

如果指定FileDownloadName或File的結果是返回的pdf未在Chrome中顯示。只有下載的文件圖標出現,需要額外點擊才能顯示pdf。如何強制瀏覽器立即顯示PDF,無需額外點擊下載的文件? – Andrus

+0

如果您正在嘗試下載。這取決於用戶瀏覽器(下載)設置。根據設置,它會將文件下載到您的下載文件夾或向用戶開放。如果您絕對想要顯示要使用的文件。你應該使用FileStringResult。在這種情況下,沒有理由指定一個文件名(用戶不會下載它)。請參見[this](http://stackoverflow.com/questions/34498184/difference-between-filecontentresult-and-filestreamresult/34498356#34498356) – Shyju

+0

用戶可能想要保存命令,並期望提供的文件名包含訂單號 – Andrus

相關問題