Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过javascript设置content disposition=附件?_Javascript_Html_Http Headers - Fatal编程技术网

如何通过javascript设置content disposition=附件?

如何通过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

如何通过javascript设置
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