在新选项卡中从POST打开PDF

时间:2015-07-22 18:34:37

标签: javascript pdf xmlhttprequest fileapi content-disposition

我需要做什么:

我需要在Firefox 的新标签页中打开该文件(其他浏览器支持并不重要)

文件名需要与Content-Disposition匹配。

所以我将 POST 中的数据发送到服务器,然后我收到 PDF文件作为回应。 响应的标题是(例子):

Content-Type: application/pdf 
Access-Control-Expose-Headers: Content-Disposition
Content-Disposition: attachment; filename="file name.pdf" 
Content-Length: 234

我的回复是PDF文件本身。(Blob - > application / pdf)

此外,还可以同时多个请求

做了什么:

现在文件在新窗口中打开,但文件名错误(文件名不可用)。它也被Firefox阻止了。

我的代码(不是全部,只有重要部分):

var xhr = new XMLHttpRequest();
                xhr.onreadystatechange = function(){
                    if (this.readyState == 4 && this.status == 201){
                        var filename = this.getResponseHeader('Content-Disposition').split('=')[1];
                        filename = filename.substr(1, filename.length-2);

                        var url = window.URL.createObjectURL(this.response);
                        window.open(url);
                    }
                };
                xhr.open('POST', host + this.getLink('preview', this.collection.jsonSchemaSwapData).href);

                xhr.setRequestHeader("Content-type","application/json");
                xhr.responseType = 'blob';
                xhr.send(JSON.stringify(this.toJSON()));

问题:

  • 浏览器将新标签屏蔽为弹出窗口(元素,然后点击它也会被阻止)
  • CreateObjectURL无法使用文件名
  • 无法在页面中看到pdf,因为我们可以同时打开几个

如何在新标签中使用正确的名称打开PDF?

0 个答案:

没有答案