我正在嘗試撰寫 MVC 端點,它可以選擇將內容處置設定為行內或附件,以便在新的瀏覽器選項卡中顯示檔案(pdf)或下載它。UI 允許用戶選擇他們希望如何打開檔案(不是我的設計——不能改變它的那個方面)。
請注意,這在 Chrome/Edge 中可以正常作業。
在 Firefox 中,PDF 的應用程式設定似乎勝過內容配置。是否有可靠的方法讓 Firefox 尊重內容處置?最好是一種可以通過瀏覽器的香草安裝作業的方式,這樣最終用戶無需對其進行任何修改即可作業。
這是我用來設定回應的代碼(類派生自 ApiController):
var response = Request.CreateResponse(System.Net.HttpStatusCode.OK);
response.Content = new PushStreamContent((stream, content, context) =>
{
dispatcher.Dispatch(request, stream);
}, new MediaTypeHeaderValue(MediaTypeNames.Application.Pdf));
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue(contentDisposition)
{
FileName = $"{auto_generated_fileName}.pdf",
};
response.Headers.CacheControl = new CacheControlHeaderValue()
{
NoCache = true,
NoStore = true
};
return response;
uj5u.com熱心網友回復:
我們在 webapp 中也注意到了這個問題。該網路應用程式有一個下載按鈕,可讓用戶下載 PDF 檔案。Firefox 在當前選項卡中顯示 PDF 檔案,這有效地殺死了 webapp。
經過一番研究,這似乎是一個有意的功能,請參閱Firefox 98 的發行說明:
當您在 Firefox 首選項設定中將應用程式設定為打開特定型別的檔案時,這些檔案將自動打開,即使是網站提供的帶有“內容處置:附件”的檔案。這同樣適用于默認設定為在 Firefox 中打開的 PDF 檔案。這是對錯誤 453455的修復。
就個人而言,雖然我可以理解一些用戶可能希望對表現不佳的網頁使用此功能,但這對于表現良好的 Web 應用程式來說是一個問題。
在錨點上設定下載屬性似乎也不起作用,Firefox 仍然顯示行內檔案(使用 Firefox 99.0 測驗)
據我所知,如果瀏覽器不允許,您不能強制瀏覽器下載檔案。其他網路應用程式(例如 OwnCloud 或 Google Drive)也有同樣的問題——如果您在 Google Drive 中的 PDF 檔案上單擊滑鼠右鍵,然后單擊Dowload,Firefox 仍會行內打開 PDF 檔案,而 Chrome 會下載它。
目前,您最好的辦法似乎是在新選項卡中打開檔案,以防止 web 應用程式或網頁被下載的檔案替換(這也是 Google Drive 似乎正在做的事情)。您可以在新選項卡或視窗中打開下載,例如通過鏈接上的目標屬性<a>或通過 元素上的formtarget 屬性<button>。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/462195.html
