我正在与使用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!');
})
}
})
有人可以帮我吗?我知道这听起来很愚蠢。搜索了很多博客,找不到合适的博客。任何提示都表示赞赏。
答案 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!');
});