2016-07-25 23 views
0

Ich habe es geschafft, meine generierte PDF-Datei von meinem Knoten JS-Server auf s3 hochzuladen. Pdf sieht in meinem lokalen Ordner gut aus, aber als ich versuchte, über die AWS-Konsole darauf zuzugreifen, wurde "PDF-Dokument konnte nicht geladen werden" angezeigt.PDF-Upload nach AWS S3 beschädigt

Ich habe versucht, es über die s3.upload und s3.putObject APIs zu laden, (für die PutObject ich auch eine on-Ende-Checker verwendet, um sicherzustellen, dass die Datei vollständig geladen wurde vor dem Senden der Anfrage). Aber die Datei im S3-Bucket ist immer noch die gleiche (kleine) Größe, 26 Bytes und kann nicht geladen werden. Jede Hilfe wird sehr geschätzt !!!

var pdfDoc = printer.createPdfKitDocument(inspectionReport); 
    var writeStream = fs.createWriteStream('pdfs/inspectionReport.pdf'); 
    pdfDoc.pipe(writeStream); 
    pdfDoc.end(); 
    writeStream.on('finish', function(){ 
     const s3 = new aws.S3(); 
     aws.config.loadFromPath('./modules/awsconfig.json'); 

    var s3Params = { 
     Bucket: S3_BUCKET, 
     Key: 'insp_report_test.pdf', 
     Body: '/pdf/inspectionReport.pdf', 
     Expires: 60, 
     ContentType: 'application/pdf' 
    }; 
    s3.putObject(s3Params, function(err,res){ 
     if(err) 
      console.log(err); 
     else 
      console.log(res); 
    }) 
+2

öffnen Sie die Datei in einem Texteditor und schauen, was die Botschaft ist - höchstwahrscheinlich seine Ihre über den Fehler zu sagen –

+0

Ich nehme die Datei soll als 26 Bytes größer sein. Führt die Zeile "console.log (res);" in Ihrem Code irgendetwas aus und druckt? Es klingt wie Ihre App beendet wird, bevor der 's3.putObject()' Aufruf abgeschlossen wird. –

+0

'Body: '/ pdf/inspectionReport.pdf',' Wie viele Bytes gibt es im * string * '/ pdf/inspectionReport.pdf'? Sieht aus wie 26. 'Body' erwartet den * body * - keinen Pfad. –

Antwort

1

Ich erkannte, dass pdfDoc.end() vor dem Start der Verrohrung kommen muss. Habe auch einen Callback verwendet, um sicherzustellen, dass s3 upload aufgerufen wird, nachdem das PDF-Schreiben abgeschlossen ist. Siehe Code unten, hoffe es hilft!

var pdfDoc = printer.createPdfKitDocument(inspectionReport); 
pdfDoc.end();  

async.parallel([ 

     function(callback){ 
      var writeStream = fs.createWriteStream('pdfs/inspectionReport.pdf'); 
      pdfDoc.pipe(writeStream); 
      console.log('pdf write finished!'); 
      callback(); 
     } 

    ], function(err){ 

     const s3 = new aws.S3(); 
     var s3Params = { 
      Bucket: S3_BUCKET, 
      Key: 'insp_report_test.pdf', 
      Body: pdfDoc, 
      Expires: 60, 
      ContentType: 'application/pdf' 
     }; 

     s3.upload(s3Params, function(err,result){ 
      if(err) console.log(err); 
      else console.log(result); 
     }); 
    } 
);