我从 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();
但是当我尝试打开创建的文件时,我得到[
关于我哪里出错了有什么想法吗?
更新:
除了上述错误消息之外,我还收到 [
在这些文件上,我获取元数据(页面大小/格式和字体数据),但没有内容。
最佳答案
问题似乎是因为我将数据存储在字符串中并尝试从那里对其进行操作。传入的数据 block 是一个缓冲区,以这种形式使用它意味着,一旦您弄清楚如何删除标题,您就可以创建 PDF 文件。
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
) 进行划分,并(笨拙地)删除 header 并将其写入文件。
关于node.js - MIME 二进制数据转 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43073134/