NodeJS请求获取pdf文件并保存在磁盘上,但打开为空白页

时间:2017-12-16 11:33:49

标签: node.js express pdf post request

我正在获取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);

1 个答案:

答案 0 :(得分:0)

编写我的解决方案以防任何人需要它。

问题在于读取文件并发送时的编码。现在我正在读取文件base64,传输然后再从base64保存,现在它工作正常。