2017-03-28 5 views
1

に私はいくつかのXMLおよび関連ファイル(PDFファイル)を返すAPI呼び出しからいくつかのデータを受信して​​います:私は私が手に作成したファイルを開こうとすると、私はMIMEバイナリデータ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

どこが間違っているのでしょうか?

UPDATE:

上記のエラーメッセージに加えて、私はまた、私は、メタデータ(ページサイズ/フォーマットやフォントデータ)が、無コンテンツを取得し、これらのファイルには[an error saying the 'document has been changed'

を取得します。

+0

作成したファイルを開いて、その内容を把握しましたか? (PDFではなく、生データファイルとして開く)コンテンツ分割が正しく機能しているかどうかを知ることができます。 –

+0

ええ、コンテンツはうまく見えますが、テキストエディタ(メモ帳など)で表示すると「 」文字がたくさんありますが、Hex/Binaryエディタで開くと3文字の文字列に置き換えられますテキストエディタがデコードできないと仮定します。 – Simon

答えて

1

問題は、データを文字列に格納してそこから操作しようとしていたためです。受信データchunkはバッファであり、このフォームでこのヘッダを使用すると、ヘッダを削除する方法を見つけたら、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)とヘッダーに基づいて分割されている(不器用)を除去し、ファイルに書き込まれます。

関連する問題