我正在获取pdf文件并希望将其保存在磁盘上。以下是我的代码:
request.post({
url: some_api_url,
json: true,
body: {
by: user,
password: 'mypassword'
}
}, function(err, response, body) {
if (err) next(err);
else {
if (typeof(body) == 'string') {
//console.log(body);
fs.writeFileSync(path.join(__dirname, 'abc.pdf'), body, 'binary', function(err) {
console.log(err);
});
} else {
console.log("invalid file");
}
}
});
这将pdf保存在具有正确大小(大约200kb)的磁盘上,这意味着post请求的正文中有数据。但是,pdf在Ubuntu中的文档查看器中打开了空白。
我还比较了一个正在运行的pdf文件的“cat abd.pdf | less”输出(打开正常)和通过请求下载的那个,两者的顶部和底部是相同的。
以下是为pdf文件提供服务的api代码。如果我在邮递员中提出请求,则pdf文件会下载并保存到磁盘并且打开正常。
let fileStat = fs.statSync(filePath);
res.writeHead(200, {
'Content-Disposition': 'attachment; filename="report.pdf"',
'Content-Type': 'application/pdf',
'Content-Length': fileStat.size
});
let readStream = fs.createReadStream(filePath);
res.on('finish', function() {
console.log("file sent");
});
readStream.pipe(res);
答案 0 :(得分:0)
编写我的解决方案以防任何人需要它。
问题在于读取文件并发送时的编码。现在我正在读取文件base64,传输然后再从base64保存,现在它工作正常。