0

ノードJSサーバーから生成されたpdfをs3にアップロードすることができました。Pdf はローカル フォルダーでは問題ないように見えますが、AWS コンソールからアクセスしようとすると、「Failed to load PDF document」と表示されます。

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

1 に答える 1

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);
        });
    }
);
于 2016-08-09T13:09:20.900 に答える