PDF上传到AWS S3已损坏

时间:2016-07-25 16:16:25

标签: amazon-web-services amazon-s3 pdfkit corrupt pdfmake

我设法将生成的pdf从我的节点JS服务器上传到s3。 Pdf在我的本地文件夹上看起来没问题但是当我尝试从AWS控制台访问它时,它表示“无法加载PDF文档”。

我尝试通过s3.upload和s3.putObject API上传它(对于putObject我也使用.on完成检查器来确保文件在发送请求之前已完全加载)。但是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);
    })

1 个答案:

答案 0 :(得分:1)

我意识到pdfDoc.end()必须在管道启动之前到来。还使用了回调来确保在pdf写入完成后调用s3上载。请参阅下面的代码,希望它有所帮助!

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