将流数据上传到 Amazon S3

Posted

技术标签:

【中文标题】将流数据上传到 Amazon S3【英文标题】:Uploading stream data to Amazon S3 【发布时间】:2018-09-07 23:39:49 【问题描述】:

我正在尝试将 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);
);

【问题讨论】:

试试***.com/questions/48363593/… 【参考方案1】:

您可能需要在参数中添加 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...

【讨论】:

@Modermo:文件指的是什么?用那个文件指的是什么来更新问题? 恐怕它仍然不适合我。 s3bucket.upload 似乎甚至没有触发,因为没有从回调中调用 console.log @Modermo 你可以试试 s3bucket.putObject 而不是上传 好的,看起来putObject 正在返回Cannot pipe, not readable 你弄错了吗?即控制台中有消息error in callback【参考方案2】:

key rappresent qrCode 的名称,data 是 qrCode 本身。

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

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

【讨论】:

以上是关于将流数据上传到 Amazon S3的主要内容,如果未能解决你的问题,请参考以下文章

将 base64 图像数据上传到 Amazon S3

从 Apache Spark 分段上传到 Amazon S3

如何将抓取的数据从 Scrapy 以 csv 或 json 格式上传到 Amazon S3?

Amazon S3 .NET:上传 base64 图像数据?

使用 Laravel 5.0 存储门面将元数据、标头(Expires、CacheControl)添加到上传到 Amazon S3 的文件中

React-native 上传图片到 amazon s3