在发送给客户端之前,如何将文件转换为base64?

时间:2018-12-10 02:01:36

标签: node.js ajax

我有一个ajax端点,我根据用户的GET请求生成pdf,然后通过Buffer将其发送回pdf。

当我尝试直接将缓冲区发送给他们时,下载的pdf损坏,但是,当我向他们发送base64版本然后在客户端对其进行解码时,它可以正常工作。

AJAX端点:

module.exports = function(req, res) {
     pdf.create('<h1>Title</h1>').toBuffer(function(err, buffer)  {
          res.setHeader('Content-Type', 'application/pdf');
          res.send(buffer.toString('base64'));
      });
};

客户

$.get('/createPDF', (data) => {
    var len = binary.length;
    var buffer = new ArrayBuffer(len);
    var view = new Uint8Array(buffer);
    for (var i = 0; i < len; i++) {
        view[i] = binary.charCodeAt(i);
    }
    const blob = new Blob([view], {type: "application/pdf"});
    const url = window.URL.createObjectURL(blob);
    const link = document.createElement('a');
    link.href = url;
    link.setAttribute('download', 'file.pdf');
    document.body.appendChild(link);
    link.click();
 });

如果我跳过服务器上的toString('base64'),而在客户端上跳过Blob创建上方的部分,则不起作用,但如果包括在内,则可以。有谁知道为什么会这样?请注意,我要的是jquery的ajax的这种特定用例。

0 个答案:

没有答案