2017-03-28 1 views
1

ich einige Daten aus einem API-Aufruf empfangen, die einige XML und die zugehörigen Dateien zurückgibt (PDFs):MIME Binärdaten zu 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(); 

Aber ich, wenn ich versuche, die Datei zu öffnen, habe ich bekommen [an error message saying the file is damaged

Irgendwelche Ideen, wo ich falsch liege?

UPDATE:

Zusätzlich zu der obigen Fehlermeldung bekomme ich auch [an error saying the 'document has been changed'

Auf diesen Dateien, die ich die Metadaten (Seite Größe/Formatierung und Schriftdaten), aber keine Inhalte.

+0

Haben Sie die erstellte Datei geöffnet, um herauszufinden, was sie enthält? (Öffnen Sie es als eine Rohdatendatei, nicht als PDF) Das sollte Ihnen eine Idee geben, wenn Ihre Aufteilung in Ordnung funktioniert. –

+0

ja der Inhalt scheint gut, es gibt eine Menge von " " Zeichen beim Betrachten in einem Texteditor (zB Notepad), aber wenn ich es in einem Hex/Binär-Editor öffne diese werden durch eine Folge von 3 Zeichen ersetzt, die ich Angenommen, der Texteditor kann nicht dekodieren. – Simon

Antwort

1

Es scheint, dass das Problem lag, weil ich die Daten in einer Zeichenfolge speicherte und versuchte, es von dort zu manipulieren. Die eingehenden Daten chunk ist ein Puffer und die Verwendung in diesem Formular bedeutet, dass, sobald Sie herausfinden, wie Sie die Header entfernen, können Sie die PDF-Dateien erstellen.

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

der bufferArray in einen einzigen Puffer konkateniert wird, diese dann basierend auf dem MIME delimiter unterteilt ist (breakStr) und den Headern (plump) entfernt und in eine Datei geschrieben.