gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 12:10:23 26 4
gpt4 key购买 nike

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

我尝试使用 async/awaits3.upload ,但我不相信s3.upload是一个 promise ,所以它不会做任何事情。

前任:

   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.each 一起使用和 async.eachSeries引用 in this stack answer像这样:
  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 object - 这似乎就是为什么 await 提前触发的原因。 managedUpload 时触发回调已解决/完成。

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

最佳答案

您应该尝试调用promise()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")

关于node.js - 如何使用 aws-sdk 将文件同步上传到 S3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57420576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com