![](/img/trans.png)
[英]beforeunload event and Content-Disposition=attachment
[英]how to set content-disposition = attachment via javascript?
如何通過javascript設置content-disposition = attachment
?
基本上,我想在使用Firefox通過Javascript加載頁面后強制執行“SaveAs”操作。
我怎樣才能做到這一點 ?
Content-Disposition是一個響應頭 ,即。 服務器必須返回它。 您無法通過客戶端javascript實現此目的。
Firefox和基於Chromium的瀏覽器支持download
屬性 。 如果您現在需要更好的兼容性,請使用基於Flash的Downloadify作為后備。
僅限HTML:使用download
屬性:
<a download href="http://upload.wikimedia.org/wikipedia/commons/b/bb/Wikipedia_wordmark.svg">Download</a>
僅限Javascript:您可以使用以下代碼保存任何文件:
function saveAs(uri) { var link = document.createElement('a'); if (typeof link.download === 'string') { link.href = uri; link.setAttribute('download', true); //Firefox requires the link to be in the body document.body.appendChild(link); //simulate click link.click(); //remove the link when done document.body.removeChild(link); } else { window.open(uri); } } var file = 'http://upload.wikimedia.org/wikipedia/commons/b/bb/Wikipedia_wordmark.svg'; saveAs(file);
1.使用Anchor“下載”(HTML5)屬性
<a href='abc.pdf' download>Click Here</a>
2.使用js以編程方式創建href,
const link = document.createElement('a');
link.href = '/xyz/abc.pdf';
link.download = "file.pdf";
link.dispatchEvent(new MouseEvent('click'));
根據Mozilla doc Anchor元素 ,下載屬性(HTML5)指示瀏覽器下載URL而不是導航到它。
所以上面的js方法動態創建錨元素並使用它下載文件只適用於相同的源文件,即有兩種方法可以解決這個問題 - >
解決這個問題的方法,在第二個注意事項中引用,即在fetch js API的幫助下可以使用blob對象
url = 'https://aws.something/abc.pdf';
fetch(url, {
method: 'GET',
}).then(function(resp) {
return resp.blob();
}).then(function(blob) {
const newBlob = new Blob([blob], { type: "application/pdf", charset: "UTF-8" })
// IE doesn't allow using a blob object directly as link href
// instead it is necessary to use msSaveOrOpenBlob
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(newBlob);
return;
}
const data = window.URL.createObjectURL(newBlob);
const link = document.createElement('a');
link.dataType = "json";
link.href = data;
link.download = "file.pdf";
link.dispatchEvent(new MouseEvent('click'));
setTimeout(function () {
// For Firefox it is necessary to delay revoking the ObjectURL
window.URL.revokeObjectURL(data), 60
});
});
另一種選擇是,如果您可以控制服務器端響應頭,那么這可能是最佳選擇。
在常規HTTP響應中, Content-Disposition響應標頭是一個標頭,指示內容是否應在瀏覽器中內嵌顯示,即作為網頁或作為網頁的一部分顯示,還是作為附件顯示下載並保存在本地。 例如
Content-Disposition: attachment
Content-Disposition: attachment; filename="filename.jpg"
對於在AWS上托管的文件,可以編輯其響應標頭,可以在元數據中更改這些標頭,在文件中的元數據中添加內容處置標頭或文件夾屬性,將密鑰添加為內容配置和值作為附件,
content-disposition : attachment
現在無論何時從瀏覽器點擊這個文件,它總是會下載而不是打開,現在如果你在錨標簽中使用這個文件鏈接,它將直接使用download html標簽下載。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.