繁体   English   中英

如何使用aws-sdk将文件同步上传到S3?

[英]How to synchronously upload files to S3 using aws-sdk?

我正在尝试将文件上传到S3存储桶,然后退出上传功能。 问题是我在上载返回存储的数据之前要退出该函数。

我尝试将s3.uploadasync/await一起s3.upload ,但是我不相信s3.upload是一个承诺,因此它什么也不做。

例如:

   for (const file of files) {
    const params = {
      Bucket: BUCKET_NAME,
      Key: file.name,
      Body: file.data
    };
    const stored = await s3.upload(params, (err, data) => {
      if (err) console.log("error", err, err.stack);
      return console.log(data);
    });
    console.log(stored);
   }
   console.log("leave loop")

我试图将Async实用程序模块与async.eachasync.eachSeries一起async.each ,如该堆栈答案中所引用的如下所示:

  const saveFile = async file => {
    const params = {
      Bucket: BUCKET_NAME,
      Key: file.name,
      Body: file.data
    };
    s3.upload(params, (err, data) => {
      if (err) console.log("error", err, err.stack);
      console.log(data);
    });
  };

  await async.eachSeries(files, saveFile, err => {
    if (err) console.log(err);
  });

  console.log("leave loop")

但是它仍然击中“离开”太早了。 我误会了一些东西,但不确定。

更新:

s3.upload返回一个managedUpload对象-这似乎就是为什么await提前触发的原因。 解析/完成managedUpload将触发回调。

那么有没有办法await完成的对象而不是managedUpload

您应该尝试在ManagedUpload上调用promise()以获得承诺并等待其解决:

for (const file of files) {
  const params = {
    Bucket: BUCKET_NAME,
    Key: file.name,
    Body: file.data
  };
  try {
    const stored = await s3.upload(params).promise()
    console.log(stored);
  } catch (err) {
    console.log(err)
  }
}
console.log("leave loop")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM