我遇到了將存儲在數據庫中的文件發回給ASP.NET MVC中的用戶的問題。我想要的是一個視圖,列出了兩個鏈接,一個查看文件,並讓mimetype發送給瀏覽器決定如何處理,另一個強制下載。將文件返回到ASP.NET MVC中的查看/下載
如果我選擇查看名爲的文件,並且瀏覽器沒有關聯的程序來打開這種類型的文件,那麼我對它的默認下載行爲沒有任何問題。但是,如果我選擇查看名爲SomeRandomFile.pdf
或SomeRandomFile.jpg
的文件,我只需簡單地打開該文件即可。但我也想保留一個下載鏈接,這樣我就可以強制下載提示,而不管文件類型如何。這有意義嗎?
我試過FileStreamResult
它適用於大多數文件,它的構造函數默認不接受文件名,所以未知文件被分配一個基於url的文件名(它不知道基於內容類型)。如果我通過指定文件名來強制文件名,我將失去瀏覽器直接打開文件的能力,並且會得到一個下載提示。有人遇到過這種情況麼。
這些都是我到目前爲止嘗試過的例子。
//Gives me a download prompt.
return File(document.Data, document.ContentType, document.Name);
//Opens if it is a known extension type, downloads otherwise (download has bogus name and missing extension)
return new FileStreamResult(new MemoryStream(document.Data), document.ContentType);
//Gives me a download prompt (lose the ability to open by default if known type)
return new FileStreamResult(new MemoryStream(document.Data), document.ContentType) {FileDownloadName = document.Name};
有什麼建議?
完美的,正是我所尋找的,它的工作方式正是我想要的。我記得過去使用過ContentDisposition,但我並沒有意識到它的Inline屬性,並且我很好奇是否有更多的MVC集成選項,而不是直接設置標題。但對AppendHeader的簡單調用看起來對我來說已經足夠優雅了。謝謝您的幫助!! – 2011-04-29 15:51:25
這在任何情況下都不起作用。有些瀏覽器希望引用文件名(attachment;「downloadfile.pdf」) – tgallard 2011-09-06 15:50:25
如果我沒有記錯,只要文件名沒有空格就可以取消引號(我通過HttpUtility.UrlEncode()運行我的程序來實現此目的)。 – 2012-04-28 11:54:24