将多个文件上载到Amazon S3

时间:2018-04-29 11:01:06

标签: php amazon-web-services amazon-s3 uploading

我需要有关如何在Amazon S3上上传多个文件的帮助。所以基本上我有三个输入字段用于文件上传,两个输入将需要10-20张图片,最后一个输入只有一个用于一个图像,并在提交表单时将它们上传到Amazon S3。

我用于上传图片的表单:

https://play.golang.org/p/duf0tEddBsR

我有一个存储桶和一切,我需要的是将多个图像上传到Amazon S3的某种解决方案。

我使用PHP作为我的后端,目前,在提交表单时,图像存储在托管中。但是我每个月会上传超过150GB的图像,我需要S3来托管这些图像。

当我将表单与Amazon S3连接并尝试上传多个图像时,我收到此消息" POST要求每个请求只上传一个文件。"。

2 个答案:

答案 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();
    }