而不是下载,而是在浏览器中打开文件

时间:2018-10-03 06:09:09

标签: javascript html5 download anchor

我的Pdf文件存储在Google存储桶中,我有一个链接,说https://storage.googleapis.com/bucketName/xyz.pdf。要下载此文件,我正在这样做,

<a href="https://storage.googleapis.com/bucketName/xyz.pdf" download> Download This File </a>

但是,当我单击该锚标记时,而不是下载此文件浏览器,甚至在我尝试通过javascript下载文件并使用此代码的情况下,都在同一标签中打开了该文件。

var link = document.createElement("a");
link.download = 'File.pdf';
link.href = 'https://storage.googleapis.com/bucketName/xyz.pdf';
link.click();

但是同样的情况再次发生,文件在同一选项卡中打开而不是下载。我不知道主要问题是什么?是这个Google存储桶不允许文件下载,还是我的Chrome设置禁止文件下载。 它不是在Chrome浏览器中下载的,我认为Chrome浏览器确实允许从CORS文件下载。

3 个答案:

答案 0 :(得分:3)

按照JavaScript/jQuery to download file via POST with JSON data构造一个Blob,并使用该Blob返回链接的文件引用。

这将以符合标准的方式通知浏览器您的意图。

示例...

$.get(/*...*/,function (result)
{
    var blob=new Blob([result]);
    var link=document.createElement('a');
    link.href=window.URL.createObjectURL(blob);
    link.download="myFileName.txt";
    link.click();

});

答案 1 :(得分:1)

尝试link.target = "_blank";,这将在新标签页中打开文件,而link.download将强制其下载。

请告知是否可行。

答案 2 :(得分:0)

解决方案

内容处置附件似乎对我有用:

self.set_header("Content-Type", "application/json")
self.set_header("Content-Disposition", 'attachment; filename=learned_data.json')

解决方法

应用程序/八位字节流

我在JSON上发生了类似的事情,对我来说,在服务器端上,我将标头设置为 self.set_header(“ Content-Type”,“ 应用程序/ json ”) 但是,当我将其更改为:

self.set_header("Content-Type", "application/octet-stream")

它会自动下载。

还知道,为了使文件仍然保留.json后缀,您需要在文件名标头上添加它:

self.set_header("Content-Disposition", 'filename=learned_data.json')