我正在尝试将最近创建的PDF上传到S3:
这是我的代码:
ejs.renderFile(path.join(__dirname, './views/', "global.ejs"), {
operatioName: recap.operation.label,
operationId: recap.operation.name,
date: recap.date,
date_ini: moment(recap.date_ini, "DDMMYYYY").locale('fr').format("DD MMMM"),
date_end: moment(recap.date_end, "DDMMYYYY").locale('fr').format("DD MMMM YYYY"),
autoConsoTotal: autoConsoTotal,
consoTotal: consoTotal,
prodTotal: prodTotal,
surplusTotal: surplusTotal,
yearAndMonthFolder: yearAndMonthFolder,
}, (err, data) => {
if (err) {
console.log(err)
} else {
// res.render('global.ejs', {
// operatioName: operationLabel,
// operationId: operation,
// month: recapMonth,
// date: RECAP_DATE,
// autoConsoTotal: autoConsoTotal,
// consoTotal: consoTotal,
// prodTotal: prodTotal,
// surplusTotal: surplusTotal,
// });
let options = {
filename: 'public/pdf/' + recap.operation.name + "/" + yearAndMonthFolder + '-BilanGlobal.pdf',
format: 'A4',
orientation: 'landscape',
type: "pdf",
paginationOffset: 1,
"renderDelay": 1000,
"base": "/home/julien/Code/customer_recap.mine/public/images/" + recap.operation.name + "/" + yearAndMonthFolder + "/",
};
pdf.create(data, options).toFile(function (err, data) {
if (err) {
console.log(err)
} else {
console.log(data);
console.log(options);
// Upload to S3
var params = {
Key: recap.operation.name + "/reports/" + yearAndMonthFolder + "-BilanGlobal.pdf",
Body: data['filename'],
Bucket: 'sunchain',
ContentType: 'application/pdf'
}
s3.putObject(params, function (err, response) {
if (err) {
console.error(err);
} else {
console.error(response);
}
});
}
});
}
});
我下载了我的文件,将其重命名为.txt,然后我可以检查它是否只有路径,而不是PDF数据:
/home/julien/Code/customer_recap/public/pdf/ACC000000/09012020_08022020-BilanGlobal.pdf
我该怎么办?我看到一些教程使用toStream
而不是toFile
,但我也希望它在本地生成,所以toFile对我来说很好。
如果您阅读putObject的API文档,您会发现Body
可以是Buffer、Typed Array、Blob、String和ReadableStream中的一种。具体来说,它是文件的内容,而不是文件的名称。
对于流,使用Body: fs.createReadStream(data['filename'])