将二进制PDF数据下载或保存到本地驱动器

时间:2017-07-31 11:36:03

标签: javascript angular express

我正在与使用Web服务和SOAP发出请求的客户合作。我有Node-Express应用程序并执行请求我正在使用soap节点模块,该模块返回一个具有二进制数据属性的对象。数据看起来像这样:

  

JVBERi0xLjQKMSAwIG9iago8PAovVHlwZSAvQ2F0YWxvZwovUGFnZXMgMyAwIFIKPj4KZW5kb2Jq \ n CjIgMCBvYmoKPDwKL1R5cGUgL091dGxpbmVzCi9Db3VudCAwCj4 + CmVuZG9iagozIDAgb2JqCjw8 \ n Ci9UeXBlIC9QYWdlcwovQ291bnQgNAovS2lkcyBbMTggMCBSIDE5IDAgUiAyMCAwIFIgMjEgMCBS \ n .... .... ....

如您所见,在固定长度之后有\ n。

如何将上述二进制数据转换为PDF并下载。我们的客户说它具有转换为PDF并下载所需的所有必需数据。 我尝试使用fs.writeFile()将其写入文件夹,但是当我尝试打开该文件时,它说该文件已损坏。这是一段代码:

soapClient.MyFunction(arguments, function(err, result){
  if(err) throw err;
  if(result){
    console.log(result.data) //... Has the Binary data JVBERi0xLjQK....

    fs.writeFile('./output.pdf', result.data, {encoding : 'binary'},       function(res){
          console.log('File saved!');
        })
  }
})

有人可以帮我吗?我知道这听起来很愚蠢。搜索了很多博客,找不到合适的博客。任何提示都表示赞赏。

2 个答案:

答案 0 :(得分:0)

我首先尝试使用简单的html页面通过复制粘贴数据来尝试不同的编码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>

        <a href="data:application/pdf;base64,JVBERi0xLjQK....">Download Base64</a>
        <a href="data:application/pdf;binary,JVBERi0xLjQK....">Download Binary</a>

    </body>
</html>

为什么不在你注意到的情况下尝试使用和不使用 / n

然后,当您能够打开文件时,我们可以看到如何自动化该过程。

我想到的是IE浏览器遇到了pdf MIME类型的问题,尝试使用 application / octet-stream

答案 1 :(得分:0)

好了所有的搜索和曲折,最后能够写出文件:

fs.writeFile('./public/output.pdf', new Buffer(result.data, "base64"), function(response){ console.log('File Saved!'); });