上传流数据到 Amazon S3

Uploading stream data to Amazon S3

我正在尝试将 svg QR 码推送到我的节点应用程序上的 S3。

据我了解,我应该将缓冲区上传到 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);
});

您可能需要在参数中添加 ContentType 和 ACL,如下所示:

let params = {
  Bucket: env.S3_BUCKET_NAME,
  Key: fileName,
  Body: qrResult,
  ContentType: 'image/svg+xml',
  ACL: 'public-read'
};

顺便说一句,我在你的代码中看不到 file 对象。

也使用 putObject 而不是 upload,例如:

s3bucket.putObject(params...

Key表示二维码的名称,数据是二维码本身。

所以你可以定义一个创建参数的函数,像这样:

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 的输出