Javascript Node.js二进制文件到PDF

Javascript Node.js二进制文件到PDF,javascript,node.js,express,pdf,Javascript,Node.js,Express,Pdf,我有一个express服务器,它可以创建一个pdf文件 我正在尝试将此文件发送到客户端: const fs=require('fs'); 功能下载(req、res){ var filePath='/../../myPdf.pdf'; fs.readFile(uuu dirname+filePath,函数(err,data){ 如果(错误)抛出新错误(错误); log('yesyy,无错误:)); 如果(!data)抛出新错误('Expected data,but get',data); con

我有一个express服务器,它可以创建一个pdf文件

我正在尝试将此文件发送到客户端:

const fs=require('fs');
功能下载(req、res){
var filePath='/../../myPdf.pdf';
fs.readFile(uuu dirname+filePath,函数(err,data){
如果(错误)抛出新错误(错误);
log('yesyy,无错误:));
如果(!data)抛出新错误('Expected data,but get',data);
console.log('gotdata',data);
res.contentType('application/pdf');
res.send(数据);
});

}
您可以通过设置正确的内容处置标题来提示浏览器下载文件:

res.setHeader('Content-disposition', 'attachment; filename=myfile.pdf');

readFile
返回一个字节,它是字节的包装器。您正在将
Buffer
发送回正在将它们记录到控制台的客户端

您看到的body.text是预期的

您需要使用
fs.writeFile
或类似工具将这些字节写入文件。下面是一个例子:

_handleDownloadAll = async () => {
  console.log('handle download all');
  const response = await request.get(
    `http://localhost:3000/download?accessToken=${localStorage.getItem(
      'accessToken'
    )}`
  );

  // load your response data into a Buffer
  let buffer = Buffer.from(response.body.text)

  // open the file in writing mode
  fs.open('/path/to/my/file.pdf', 'w', function(err, fd) {  
    if (err) {
        throw 'could not open file: ' + err;
    }

    // write the contents of the buffer
    fs.write(fd, buffer, 0, buffer.length, null, function(err) {
      if (err) {
        throw 'error writing file: ' + err;
      }
      fs.close(fd, function() {
          console.log('file written successfully');
      });
    });
  });
};
您可能需要试验缓冲区编码,它默认为
utf8

读这个


另一个您可能要考虑的选项是在服务器上生成PDF,并简单地向客户端发送一个链接到它可以下载的地方。

<代码> Read Fixs/Cord>返回一个原始字节。您将这些原始字节发送回正在将它们记录到控制台的客户端。您看到的
body.text
是预期的。您需要使用
fs.writeFile
或类似工具将这些字节写入文件。请参阅此链接