2016-07-25 6 views
0

Мне удалось загрузить сгенерированный PDF-файл на s3 с моего узла JS-сервера. Pdf выглядит нормально в моей локальной папке, но когда я попытался получить доступ к нему с консоли AWS, он указывает «Не удалось загрузить документ PDF».Загрузка PDF в AWS S3 повреждена

Я попытался загрузить его через API s3.upload и s3.putObject, (для putObject я также использовал проверку .on finish, чтобы убедиться, что файл был полностью загружен перед отправкой запроса). Но файл в ведро S3 все тот же (маленький) размер, 26 байтов и не может быть загружен. Любая помощь очень ценится !!!

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

открыть файл в текстовом редакторе и посмотреть, что это сообщение - скорее всего, его сообщая об ошибке –

+0

я беру его файл должен быть больше, чем 26 байт. Выполняет ли строка 'console.log (res);' в вашем коде и печатает что-нибудь? Похоже, ваше приложение выходит до завершения вызова 's3.putObject()'. –

+0

'Body: '/ pdf/inspectReport.pdf',' Сколько байтов в строке * '/ pdf/inspectReport.pdf'? Похож 26. «Тело» ожидает * тело * - не путь. –

ответ

1

Я понял, что pdfDoc.end() должен появиться до начала подачи труб. Также использовали обратный вызов, чтобы обеспечить загрузку s3 после завершения записи в формате PDF. См. Код ниже, надеюсь, что это поможет!

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); 
     }); 
    } 
); 
Смежные вопросы