使用S3和AWS控制台上载包含子文件夹的文件夹

时间:2011-02-25 22:01:50

标签: amazon-s3

当我尝试通过AWS控制台将包含子文件夹的文件夹上传到S3时,只会上传文件而不是子文件夹。

您也无法选择文件夹。它总是需要先打开文件夹才能选择任何内容。

这甚至可能吗?

15 个答案:

答案 0 :(得分:76)

我建议您使用AWS CLI。因为使用命令行和awscli非常容易

    aws s3 cp SOURCE_DIR s3://DEST_BUCKET/ --recursive

或者您可以使用

进行同步
    aws s3 sync SOURCE_DIR s3://DEST_BUCKET/

请记住,您必须安装aws cli并使用您的访问密钥ID和密钥访问密钥ID对其进行配置

     pip install --upgrade --user awscli   
     aws configure

答案 1 :(得分:47)

您不需要增强型上传器(我认为不再存在)或任何第三方软件(总是有人会冒险从S3存储桶或甚至所有AWS窃取您的私人数据或访问密钥资源)。

由于新的AWS S3网络上传管理器支持拖放文件和文件夹,只需登录https://console.aws.amazon.com/s3/home即可开始使用像往常一样上传过程,然后直接将文件夹从桌面拖到S3页面。如果要上传敏感的私人数据,请确保您使用的页面以https:// protocol。

开头

答案 2 :(得分:39)

Amazon S3控制台现在支持上传整个文件夹层次结构。在“上载”对话框中启用“增强上传器”,然后将一个或多个文件夹添加到上载队列中。

http://console.aws.amazon.com/s3

答案 3 :(得分:31)

通常我使用AWS管理控制台提供的Enhanced Uploader。但是,由于这需要Java,因此可能会导致问题。我发现s3cmd是一个很好的命令行替代品。这是我使用它的方式:

s3cmd --configure   # enter access keys, enable HTTPS, etc.
s3cmd sync <path-to-folder> s3://<path-to-s3-bucket>/

答案 4 :(得分:5)

我遇到了在S3中上传文件夹和子文件夹的增强上传工具的问题。但是,我可以通过简单地将文件夹拖放到S3存储桶中来上传文件夹以及文件夹中的子文件夹,而不是找到工具。

注意:此拖放功能在Safari中不起作用。我已经在Chrome中对它进行了测试,效果很好。

Drag and drop

拖放文件和文件夹后,此屏幕最后会打开以上传内容。

enter image description here

答案 5 :(得分:1)

解决方案1:

var AWS = require('aws-sdk');
var path = require("path");
var fs = require('fs');

const uploadDir = function(s3Path, bucketName) {

    let s3 = new AWS.S3({
    accessKeyId: process.env.S3_ACCESS_KEY,
    secretAccessKey: process.env.S3_SECRET_KEY
    });

    function walkSync(currentDirPath, callback) {
        fs.readdirSync(currentDirPath).forEach(function (name) {
            var filePath = path.join(currentDirPath, name);
            var stat = fs.statSync(filePath);
            if (stat.isFile()) {
                callback(filePath, stat);
            } else if (stat.isDirectory()) {
                walkSync(filePath, callback);
            }
        });
    }

    walkSync(s3Path, function(filePath, stat) {
        let bucketPath = filePath.substring(s3Path.length+1);
        let params = {Bucket: bucketName, Key: bucketPath, Body: fs.readFileSync(filePath) };
        s3.putObject(params, function(err, data) {
            if (err) {
                console.log(err)
            } else {
                console.log('Successfully uploaded '+ bucketPath +' to ' + bucketName);
            }
        });

    });
};
uploadDir("path to your folder", "your bucket name");

解决方案2:

aws s3 cp SOURCE_DIR s3://DEST_BUCKET/ --recursive

答案 6 :(得分:1)

执行类似于以下命令的内容:

aws s3 cp local_folder_name s3://s3_bucket_name/local_folder_name/ --recursive

答案 7 :(得分:0)

值得一提的是,如果您只是使用S3进行备份,则只需将文件夹压缩然后上传即可。这将节省您上传的时间和成本。

如果您不确定如何从终端进行高效压缩,请查看OSX的here

$ zip -r archive_name.zip folder_to_compress适用于Windows。 或者,7-Zip等客户端对Windows用户来说就足够了

答案 8 :(得分:0)

我在这里看不到Python的答案。 您可以使用Python / boto3脚本文件夹上载。 以下是如何以递归方式从目录树中获取所有文件名:

aws lambda invoke
    --function-name <lambda function name>
    --payload '{
        "Records":[{
            "s3":{
                "bucket":{
                    "name":"<bucket name>"
                },
                "object":{
                    "key": "<key name>"
                }
            }
        }]
    }' outfile

以下是使用Python / boto将文件上传到S3的方法:

def recursive_glob(treeroot, extention):
    results = [os.path.join(dirpath, f)
        for dirpath, dirnames, files in os.walk(treeroot)
        for f in files if f.endswith(extention)]
    return results

我用这些想法来写Directory-Uploader-For-S3

答案 9 :(得分:0)

我试图解决这个问题时最终到了这里。现在有了这个版本,你可以将一个文件夹拖放到它中并且它可以工作,即使它不允许你在打开上传对话框时选择一个文件夹。

答案 10 :(得分:0)

您可以拖放这些文件夹。仅 Chrome和Firefox 浏览器支持拖放功能。 请参考此链接 https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-objects.html

答案 11 :(得分:0)

您可以使用传输管理器上传多个文件,目录等 有关更多信息:

https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/examples-s3-transfermanager.html

答案 12 :(得分:0)

您可以通过拖放或指向并单击来上传文件。要上传文件夹,必须将其拖放。仅Chrome和Firefox浏览器支持拖放功能

答案 13 :(得分:-1)

考虑使用CloudBerry Explorer freeware将完整的文件夹结构上传到Amazon S3。

答案 14 :(得分:-2)

您无法通过在线工具上传这样的嵌套结构。我建议使用类似Bucket Explorer的内容进行更复杂的上传。