node.js - base64 转 S3 多张图片
问题描述
我目前正在使用以下代码将 base64 字符串上传到 AWS S3
buf = new Buffer(req.body.image.replace(/^data:image\/\w+;base64,/, ""),'base64')
var data = {
Key: String(product._id),
Body: buf,
ContentEncoding: 'base64',
ContentType: 'image/jpeg',
ACL: 'public-read'
};
s3Bucket.putObject(data, function(err, data){
if (err) {
return res.json({
success: false,
msg: 'Oops! Something went wrong.' + err
});
} else {
console.log(data);
var url = "https://s3.eu-central-1.amazonaws.com/bucketname/" + String(product._id);
product.image = url;
product.save(function(err) {
if (err)
return res.json({
success: false,
msg: 'Oops! Something went wrong.' + err
});
// Return the product
res.json({
success: true,
product: product
});
});
}
});
这适用于仅将 1 个单一图像上传到 AWS S3 平台。我们现在正在对应用程序进行更改,这意味着我们要上传多个图像,因此服务器将接收到一个 base64 图像数组。将这些上传到 AWS S3 平台的最佳方式是什么?我无法弄清楚。
解决方案
我假设您使用的是 AWS javascript SDK,遗憾的是您可能知道 s3 putObject 仅支持每个 HTTP 请求上传一个对象。
我会通过使用承诺并行发送多个请求来加快图像上传速度。
一些未经测试的代码示例:
const promises = images.map(img => s3Bucket.putObject({
Key: img._id,
Body: new Buffer(img.replace(/^data:image\/\w+;base64,/, ""),'base64'),
ContentEncoding: 'base64',
ContentType: 'image/jpeg',
ACL: 'public-read'}).promise());
Promise.all(promises)
.then(data => {
console.log(data); // this should be an array of resolved s3 put object promises now
// you probably want to update your product model accordingly here, I'm just copying your existing code
var url = "https://s3.eu-central-1.amazonaws.com/bucketname/" + String(product._id);
product.images = url;
product.save(function(err) {
if (err) {
return res.json({
success: false,
msg: 'Oops! Something went wrong.' + err
});
}
// Return the product
return res.json({
success: true,
product: product
});
})
.catch(error => {
//handle the error in case one of the promises gets rejected
return res.json({
success: false,
msg: 'Oops! Something went wrong.' + err
});
});
});
推荐阅读
- python - 如何冻结桌面然后在其上绘图?喜欢 gyazo 或 sharex 区域选择
- python-3.x - 在 python 中运行 shell 脚本之前要运行的多个环境变量
- flutter - 为什么在颤振应用程序的发布版本中从图库中选择后不显示图像?
- sas - 将字符串转换为数字
- javascript - 反应中的条件函数
- javascript - Javascript new Date() 不起作用...有时
- r - R 语言:将循环的结果存储到表中
- variables - 在机器人框架中,我如何在数据驱动方法中执行多个测试用例
- arduino - 输入!== 输出信号 - 为什么?
- javascript - 显示当前 discord 服务器 discord.js 中的所有 webhook