小编Web*_*efr的帖子

在新选项卡中从POST打开PDF

我需要做什么 :

我需要在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
Run Code Online (Sandbox Code Playgroud)

我的回答是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()));
Run Code Online (Sandbox Code Playgroud)

问题:

  • 浏览器将新选项卡阻为弹出窗口(一个元素,然后点击它也被阻止)
  • CreateObjectURL不适用于文件名 …

javascript pdf xmlhttprequest content-disposition fileapi

5
推荐指数
0
解决办法
1253
查看次数