Javascript Node.js二进制文件到PDF
我有一个express服务器,它可以创建一个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
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
或类似工具将这些字节写入文件。请参阅此链接