В настоящее время я использую 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 правильный.
может ли кто-нибудь помочь мне решить эту проблему?
Обновить
Я создаю PDF-файл, используя pdfkit:
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;
})
})
}
temp/
, я предполагаю, что файл был только что сохранен. Вы уверены, что он был полностью записан, прежде чем пытаться его открыть? Можем ли мы увидеть, где вы вызываетеuploadFile
? - person Marcos Casagrande   schedule 23.07.2018