私は現在 aws-sdk を使用して、次のように PDF ファイルをバケット S3 にアップロードしています。
function uploadFile (filePath, remoteFilename, cb) {
var fileBuffer = fs.createReadStream(filePath); // ex.: 'temp/longFileName.pdf'
fileBuffer.on('error', function(err) {
logger.warn('Failed reading local pdf file');
cb(err);
});
s3.upload({
Bucket: 'someBucketName',
Key: remoteFilename,
Body: fileBuffer
}, function (error, response) {
cb(error, { response, remoteFilename });
});
}
問題は、ファイルが 0B サイズでアップロードされることもあれば、正しいサイズでアップロードされることもありますが、ダウンロードすると破損し、もちろん正しくアップロードされて適切に開くこともあります。
システムファイルからローカルでpdfファイルを読みましたが、そのpdfファイルは正しいです。
誰かがこの問題を解決するのを手伝ってくれますか?
アップデート
私はpdfkitを使用してPDFを作成しています:
function createPdf (data, cb) {
var fs = require('fs');
var PDFDocument = require('pdfkit');
var filePath = 'temp/longFileName.pdf';
var pdf = new PDFDocument({
size: 'LEGAL',
info: {
Title: 'Tile of File Here',
Author: 'Some Author',
}
});
// Write stuff into PDF
pdf.text('Hello World');
// Stream contents to a file
pdf.pipe(
fs.createWriteStream(filePath)
)
.on('finish', function () {
console.log('PDF closed');
});
// Close PDF and write file.
pdf.end();
cb(null, {filePath})
}
この関数のコールバックが呼び出されたら、関数を呼び出しuploadFile
ます。
function doAll (someData, cb) {
createPdf(someData, function(err, data) {
if (err) console.log(err)
uploadFile(data.filePath, function(err,data) {
if (err) console.log(err)
console.log('finished')
cb(null, 'done');
return;
})
})
}