Node.js 将文件从节点js上载到aws s3
我正在使用aws sdk上传用户输入图像,然后从aws获取图像链接,并将链接存储在mongoDB中。在这种情况下,当我运行.upload()时,它是异步的Node.js 将文件从节点js上载到aws s3,node.js,amazon-s3,Node.js,Amazon S3,我正在使用aws sdk上传用户输入图像,然后从aws获取图像链接,并将链接存储在mongoDB中。在这种情况下,当我运行.upload()时,它是异步的 const imgSRC = []; for (let img of image) { console.log(img); const params = { Bucket: process.env.AWS_BUCKET, Key: `${img.originalname}_${userID}`, Body: img.buffe
const imgSRC = [];
for (let img of image) {
console.log(img);
const params = {
Bucket: process.env.AWS_BUCKET,
Key: `${img.originalname}_${userID}`,
Body: img.buffer,
};
s3.upload(params, (error, data) => {
if (error) {
console.log(error);
res.status(500).json({ msg: "server error" });
}
imgSRC.push(data.Location);
console.log(imgSRC);
});
}
}));
const post=等待newPost.save()
在这种情况下,当.save运行到mongodb时,还没有来自aws的imgLinks。我怎样才能解决这些问题
我已经尝试过async,但它不起作用您需要以这种方式使用
Promise.all()
const uploadImage = (obj) => {
return new Promise((resolve, reject) => {
const params = {
Bucket: process.env.AWS_BUCKET,
Key: obj.key,
Body: obj.body,
}
s3.upload(params, (error, data) => {
if (error) {
console.log(error);
return reject(error);
}
return data;
});
})
}
const mainFunction = async () => {
const promises = [];
for (let img of image) {
const options = {
key: `${img.originalname}_${userID}`,
body: img.buffer
};
promises.push(uploadImage(options));
}
const result = await Promise.all(promises);
const imgSRC = result.map((r) => { return r.Location });
return imgSRC;
}
您需要以这种方式使用
Promise.all()
const uploadImage = (obj) => {
return new Promise((resolve, reject) => {
const params = {
Bucket: process.env.AWS_BUCKET,
Key: obj.key,
Body: obj.body,
}
s3.upload(params, (error, data) => {
if (error) {
console.log(error);
return reject(error);
}
return data;
});
})
}
const mainFunction = async () => {
const promises = [];
for (let img of image) {
const options = {
key: `${img.originalname}_${userID}`,
body: img.buffer
};
promises.push(uploadImage(options));
}
const result = await Promise.all(promises);
const imgSRC = result.map((r) => { return r.Location });
return imgSRC;
}
如果在
s3.upload
方法上使用wait
,则应删除此方法的回调
try {
const data = await s3.upload(params);
imgSRC.push(data.Location);
console.log(imgSRC);
} catch(e) {
console.log(error);
res.status(500).json({ msg: "server error" });
}
让我知道它是否有效。如果您在
s3上使用wait
方法,则应删除此方法的回调
try {
const data = await s3.upload(params);
imgSRC.push(data.Location);
console.log(imgSRC);
} catch(e) {
console.log(error);
res.status(500).json({ msg: "server error" });
}
让我知道它是否有效。它因某种原因不起作用。当我在控制台中注销该数据时。它说数据是未定义的。或者我认为我的代码中有输入错误或遗漏了一些单词。由于某种原因,它不起作用。当我在控制台中注销该数据时。它说数据是未定义的。或者我认为我的代码中有输入错误或缺少一些单词