MIME二进制数据转换为PDF

我从一个API调用接收一些数据,返回一些XML和相关文件(PDF):

var req = http.request(HTTPOPTIONS, function(resp){ var rawData = ''; //Build list from response data resp.on('data', function (chunk) { rawData+= chunk; }); //Process List resp.on('end', function () { var breakStr = rawData.split('\n')[0]; var fileSections = rawData.split(breakStr); for(var i in fileSections){ var content = fileSections[i].split((/Content-Length: [0-9]*/)); var fileName = content[0].split('filename=')[1].trim(); var file = {Bucket : 'MyBucket', Key: ROOT+'/'+FOLDER+'/'+SUBFOLDER+'/'+fileName, Body: content[1]}; console.log('Creating file: '+file.Key ); promises.push(S3.upload(file).promise()); } Promise.all(promises).then(...); }); }); req.write(XMLREQUEST); req.end(); 

但是当我尝试打开创build的文件时,我得到[ 一个错误消息说该文件已损坏

任何想法,我要去哪里错了?

更新:

除了上面的错误信息,我也得到[ 一个错误说'文档已经改变'

在这些文件上我得到元数据(页面大小/格式和字体数据),但没有内容。

看来这个问题是因为我将数据存储在一个string中并试图从那里操纵它。 传入的数据chunk是一个缓冲区,以这种forms使用它意味着,一旦你找出如何删除标题,你可以创buildPDF文件。

 var req = http.request(HTTPOPTIONS, function(resp){ var respChunks =[]; var respChunksLength = 0; resp.on('data', function (chunk) { respChunks.push(chunk); respChunksLength+=chunk.length; }); resp.on('end', function () { var confResp = Buffer.concat(respChunks, respChunksLength); var breakStr = confResp.slice(0,confResp.indexOf('\n')); var bufferArray = []; var startBreak = confResp.indexOf(breakStr); while(startBreak>-1){ bufferArray.push(confResp.slice(startBreak+breakStr.length+1,confResp.indexOf(breakStr,startBreak+1))); startBreak = confResp.indexOf(breakStr,startBreak+1); } var trim=0; for(var i = 1; i<bufferArray.length;i++){ trim = bufferArray[i].toString().indexOf('%'); fs.writeFile('testFile'+i+'.pdf',bufferArray[1].slice(trim)); }); }); req.write(generateProposalDetailXML()); req.end(); 

bufferArray连接成一个缓冲区,然后根据MIME分隔符( breakStr )和头文件(笨拙地)将其breakStr ,并写入文件。