我需要有关如何在Amazon S3上上传多个文件的帮助。所以基本上我有三个输入字段用于文件上传,两个输入将需要10-20张图片,最后一个输入只有一个用于一个图像,并在提交表单时将它们上传到Amazon S3。
我用于上传图片的表单:
https://play.golang.org/p/duf0tEddBsR
我有一个存储桶和一切,我需要的是将多个图像上传到Amazon S3的某种解决方案。
我使用PHP作为我的后端,目前,在提交表单时,图像存储在托管中。但是我每个月会上传超过150GB的图像,我需要S3来托管这些图像。
当我将表单与Amazon S3连接并尝试上传多个图像时,我收到此消息" POST要求每个请求只上传一个文件。"。
答案 0 :(得分:1)
S3是高度可扩展的分布式存储。
如果您的计算机在本地拥有这些图像,则只需使用
即可aws s3 sync local_folder s3:// bucket_name /
https://docs.aws.amazon.com/cli/latest/reference/s3/sync.html
cli负责同步数据。
您还可以使用配置设置在cli上配置所需的并行度。
https://docs.aws.amazon.com/cli/latest/topic/s3-config.html
如果这将是连续的数据移动,您也可以以编程方式执行此操作。
<强> EDIT1:强>
一次只能从UI上传一个文件。
您可以通过javascript对其进行排序,并一次上传一个。
如果你想把它带到后端,你可以这样做,
https://w3lessons.info/2013/09/06/jquery-multiple-file-upload-to-amazon-s3-using-php/
希望它有所帮助。
答案 1 :(得分:0)
这是NodeJS代码,它将为您提供有关上传所有文件的理念,然后在上传完成后将响应发送回UI。
我在这里使用promises,并且promise.all()方法将解决所有的promise。
这里我使用了Node.JS的multer模块,它帮助我处理从UI收到的文件
app.post('/uploadMultipleFiles',upload.array('file', 10),function(req,res){
var promises=[];
for(var i=0;i<req.files.length;i++){
var file = req.files[i];
promises.push(uploadLoadToS3(file));
}
Promise.all(promises).then(function(data){
res.send('Uploadedd');
}).catch(function(err){
res.send(err.stack);
})
})
function uploadLoadToS3(ObjFile){
var params={
ACL :'public-read',
Body : new Buffer(ObjFile.buffer),
Bucket:'ascendon1',
ContentType:ObjFile.mimetype,
Key:ObjFile.originalname
}
return s3.upload(params).promise();
}