我尝试在我的节点应用上将svg二维码推送到S3。
据我所知,我应该将Buffer上传到S3。当我检查qrResult时,我在任何地方都看不到。也许我从根本上误解了writeStreams的概念,以及如何将数据传输到S3上传,但我似乎无法弄清楚这一点......
let fileName = 'qrCode'
let qrCode = Qr.image('The ultimate test', { type: 'svg' });
let output = fs.createWriteStream(fileName)
let qrResult = qrCode.pipe(output)
let s3bucket = new Aws.S3({
accessKeyId: env.AWS_ACCESS_KEY
secretAccessKey: env.AWS_SECRET,
Bucket: env.S3_BUCKET_NAME,
});
let params = {
Bucket: env.S3_BUCKET_NAME,
Key: fileName,
Body: qrResult,
};
s3bucket.upload(params, function (err, qrResult) {
if (err) {
console.log('error in callback');
console.log(err);
}
console.log('success');
console.log(qrResult);
});
答案 0 :(得分:1)
您可能需要添加ContentType&您的参数中的ACL为:
let params = {
Bucket: env.S3_BUCKET_NAME,
Key: fileName,
Body: qrResult,
ContentType: 'image/svg+xml',
ACL: 'public-read'
};
BTW我在代码中看不到file
个对象。
同样使用putObject
而不是upload
,如:
s3bucket.putObject(params...
答案 1 :(得分:0)
密钥表示qrCode的名称,数据是qrCode本身。
所以你可以定义一个创建params的函数,类似的东西:
aws.config.update({
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
});
const s3 = new aws.S3({
params: {
Bucket: process.env.S3_BUCKET
}
const data = createParams(name,data);
s3.putObject(data, (err, response) => {....});
createParams(qrName, qrCode) {
let data = {
Key: file.name,
Body: file.data,
ContentType: 'image/svg+xml',
ACL: 'public-read'
}
return data
}
数据是您的写入流或qrCode
的输出