如何通过javascript设置content disposition=附件?
如何通过javascript设置如何通过javascript设置content disposition=附件?,javascript,html,http-headers,Javascript,Html,Http Headers,如何通过javascript设置content disposition=attachment 基本上,我希望在页面通过Javascript加载后,使用Firefox强制执行“SaveAs”操作 我如何才能做到这一点?内容处置是一个,即服务器必须返回它。使用客户端javascript无法实现这一点。基于Firefox和Chromium的浏览器支持。如果您现在需要更好的兼容性,请使用基于闪存的备份 仅限HTML:使用下载属性: 1.使用锚定“下载”(HTML5)属性 <a href='ab
content disposition=attachment
基本上,我希望在页面通过Javascript加载后,使用Firefox强制执行“SaveAs”操作
我如何才能做到这一点?内容处置是一个,即服务器必须返回它。使用客户端javascript无法实现这一点。基于Firefox和Chromium的浏览器支持。如果您现在需要更好的兼容性,请使用基于闪存的备份
仅限HTML:使用
下载属性:
1.使用锚定“下载”(HTML5)属性
<a href='abc.pdf' download>Click Here</a>
根据Mozilla文档,下载属性(HTML5)指示浏览器下载URL,而不是导航到URL
重要提示:
- 此属性仅适用于相同的源URL
- 虽然HTTP(s)URL需要位于同一来源,但允许使用blob:URL和data:URL,以便可以下载JavaScript生成的内容,例如在图像编辑器Web应用程序中创建的图片
因此,上述动态创建锚元素并使用其下载文件的js方法将仅适用于相同来源的文件,即
有两种方法可以处理此问题->
- 客户端
- 服务器端
客户端解决方案:->
这个问题的解决方法,在第二个注释中引用,即可以在fetchjsapi的帮助下使用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响应中,响应标头是一个标头,指示内容是否应在浏览器中内联显示,即作为网页或网页的一部分,或作为本地下载和保存的附件。
e、 g
对于AWS上托管的文件,可以编辑其响应头,这些响应头可以在元数据中更改,在文件或文件夹属性的元数据中添加内容处置头,将键添加为内容处置,将值添加为附件
content-disposition : attachment
现在,每当从浏览器点击这个文件时,它总是下载而不是打开,现在如果你在锚定标记中使用这个文件链接,它将使用下载html标记直接下载。对,这就是我的想法。当我尝试这个时(作为一个完全的javaScript新手)这就好像我使用了“true”作为下载文件的所需名称。我认为它应该是link.setAttribute('download','')
为了避免为下载文件提供建议的名称?从2018年春季开始,这种方法不再适用于跨来源请求:哇,这真是令人伤心。因此,在这种情况下,唯一的选择是在服务器上使用内容处置
头。+1好消息:“如果[download]属性有一个值,它将在保存提示中用作预填充的文件名(用户仍然可以根据需要更改文件名)。”坏消息:如果HTTP标头内容处置:提供的文件名与此属性不同,则HTTP标头优先于此属性。“我在aws中添加了content disposition
,但chrome仍然在PDF viewer中打开它,而不是提示保存文件。我还能做些什么来防止chrome自动打开它吗?编辑:一段时间后,我可以得到“另存为”提示。也许AWS延迟了元数据更改的效果。谢谢你是如何得到“另存为”提示的,chrome刚刚用密钥从aws下载了文件?当url过期时会发生什么,它会将您带到403 erorr页面,我想知道如何处理它
Content-Disposition: attachment
Content-Disposition: attachment; filename="filename.jpg"
content-disposition : attachment