node.js - MIME 二进制数据转 PDF

标签 node.js aws-lambda mime

我从 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();

但是当我尝试打开创建的文件时,我得到[ an error message saying the file is damaged

关于我哪里出错了有什么想法吗?

更新:

除了上述错误消息之外,我还收到 [ an error saying the 'document has been changed'

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

最佳答案

问题似乎是因为我将数据存储在字符串中并尝试从那里对其进行操作。传入的数据 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/

相关文章:

json - mime 类型设置

python - 如何使用 Python imaplib 回复电子邮件并包含原始消息?

iis - 如何允许 IIS express 访问任何文件扩展名

aws-lambda - 为什么只有某些部署目标才会出现错误 "Code uncompressed size is greater than max allowed size of 272629760"?

aws-lambda - Lambda 函数向 CloudFront 返回了无效请求或响应

node.js - 在 npm 安装期间检测 node-webkit

php - drupal或joomla是否允许将node.js和socket.io与php组合?

aws-lambda - "no permissions for [indices:data/write/bulk]"导致从 DynamoDB 到 elasticsearch 的流数据失败

node.js - 更新 package.json 文件,并将依赖项手动复制到 node_modules 中

javascript - 如何使用promise返回数组的最终结果?