【问题标题】:javascript ajax pdf download returns empty documentjavascript ajax pdf下载返回空文档
【发布时间】:2018-07-04 19:29:21
【问题描述】:

我有一个返回 pdf 文件的请求。可以很好的在浏览器中显示,通过curl下载。

我的反应前端应用程序调用此请求 (ajax),并将其返回给用户。

我是这样称呼它的:

httpRequest({
    method: 'GET',
    responseType: 'blob',
    url: `/test/pdf?` +
            `param1=${var1}&` +
            `param2=${var2}`
});

这是httpRequest:

export const httpRequest = (options) => {
return new Promise((resolve, reject) => {
    const contentType = options.contentType ? options.contentType : 'application/x-www-form-urlencoded';
    request.open(options.method, options.url, async);
    request.setRequestHeader('Content-Type', contentType);
    request.onreadystatechange = () => {
        if (request.readyState === readyState && request.status === status) {
            switch (responseType) {
                case 'json': {
                    if (request.responseText) {
                        resolve(JSON.parse(request.responseText));
                    } else {
                        throw new Error('Can not parse JSON!');
                    }
                    break;
                }
                case 'string': {
                    resolve(request.responseText);
                    break;
                }
                case 'blob': {
                    resolve(request.response)
                }
                default: {
                    resolve(request);
                    break;
                }
            }
        }
    };
    request.send(data);
});

};

得到响应后,我将其返回给用户:

const link = document.createElement('a');
const file = new Blob([response.response], { type: 'application/pdf' });

link.href = window.URL.createObjectURL(file);
link.download = `test.pdf`;
document.body.appendChild(link);
link.click();

它返回给我空的 pdf(两个空页)。它的字节大小比带有内容的普通 pdf 大近 2 倍(我从 curl 得到它)。

这是两个 pdf 之间的典型区别(好的是左边,坏的是右边) http://storage5.static.itmages.com/i/18/0125/h_1516888730_3382943_f47d4f9cbe.png

我的代码有什么问题?任何解决方法?

【问题讨论】:

  • 响应是什么样的?你很可能不能把它扔到一个 Blob 中然后收工
  • 澄清一下,请确保您的初始响应是 blob 友好的。如果您收到回复,则问题可能不在网络呼叫developer.mozilla.org/en-US/docs/Web/API/Blob/Blob

标签: javascript ajax pdf blob


【解决方案1】:

看起来返回响应部分没问题,因此请尝试检查 httpRequest() - 是否正确应用了参数,例如 responseType。请分享代码,它可能会提供更多信息。

【讨论】:

  • request.responseType = 'blob';需要
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-11
  • 2018-08-23
  • 1970-01-01
  • 1970-01-01
  • 2012-11-19
  • 1970-01-01
  • 2019-06-21
相关资源
最近更新 更多