检查base64字符串是否包含有效的PDF - 并且没有其他内容

时间:2018-02-26 07:55:28

标签: node.js pdf base64

在我的网络应用程序中,用户只能上传图片和PDF。它们从前端到后端都是base64字符串。在那里,在Node.js 8.9服务器上,我想做一些健全性检查,即测试我得到的base64字符串实际上只是图像和PDF - 而不是别的。

对于图像,这很容易。使用带有failOnError true的尖锐npm模块,给了我我想要的内容:base64字符串中的一个错误的字符将导致失败并且输入将被拒绝。

然而,对于PDF,我找不到类似的解决方案。我已经尝试过pdf2json(无论如何我的要求似乎已经过功能了),但是通过转换为缓冲区传递base64字符串失败了。

1 个答案:

答案 0 :(得分:0)

我终于找到了一个完全符合我期望的NPM模块:hummusJS。 以下代码适用于我的测试:有效的PDF被接受,而无效的字符串被拒绝。到目前为止,没有发现任何性能影响。

var hummus = require('hummus');

let pdfBase64String = '<<base64 string here>>';
let bufferPdf;
try {
  bufferPdf = Buffer.from(pdfBase64String, 'base64');
  const pdfReader = hummus.createReader(new hummus.PDFRStreamForBuffer(bufferPdf));
  var pages = pdfReader.getPagesCount();
  if(pages > 0) {
      console.log("Parsable with Hummus and more than 0 pages. Seems to be a valid PDF!");
  }
  else {
      console.log("Unexpected outcome for number o pages: '" + pages + "'");
  }
}
catch(err) {
   console.log("ERROR while handling buffer of pdfBase64 and/or trying to parse PDF: " + err);
}