从AJAX调用返回的blob下载PDF

时间:2019-06-25 22:38:22

标签: javascript ajax pdf

我正在开发一个应用程序,用户可以单击一个按钮来生成PDF。该按钮进行ajax调用,该URL返回文件的URL。然后,我们再次调用以获取文件(因为该文件受用户的auth令牌保护),因此我得到了一大堆东西。我知道这是正确的格式,因为当我去邮递员中执行相同的请求,然后单击下载按钮时,它会返回正确的pdf。

如何使用JavaScript在浏览器中正确下载文件?

我查看了Download pdf file from ajax response并修改了第二个响应(提供100赏金)以解决Chrome现在应该采用的方式,但是我得到了一个空白的PDF(请注意正确的页面数量)你...)。

在Firefox中,我突然看到一些弹出窗口,然后迅速消失,并且没有下载。

这是我的代码(与其他问题的答案非常相似):

let filename = result.url.split('/')[result.url.split('/').length - 1];
if (typeof window.chrome !== 'undefined') {
    // Chrome version
    let link = document.createElement('a');
    link.href = window.URL.createObjectURL(new Blob([response.data], { type: 'application/pdf' }));
    link.download = filename;
    link.click();
} else if (typeof window.navigator.msSaveBlob !== 'undefined') {
    // IE version
    let blob = new Blob([response.data], { type: 'application/pdf' });
    window.navigator.msSaveBlob(blob, filename);
} else {
     // Firefox version
     let file = new File([response.data], filename, { type: 'application/force-download' });
     window.open(URL.createObjectURL(file));
}

与最初提出问题的2016年相比,我如何进一步修改此代码以使其在2019年生效?

或者,您如何建议以其他方式进行此操作,同时又保持与我最初描述的相同的API请求流?

0 个答案:

没有答案