当我尝试通过AWS控制台将包含子文件夹的文件夹上传到S3时,只会上传文件而不是子文件夹。
您也无法选择文件夹。它总是需要先打开文件夹才能选择任何内容。
这甚至可能吗?
答案 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控制台现在支持上传整个文件夹层次结构。在“上载”对话框中启用“增强上传器”,然后将一个或多个文件夹添加到上载队列中。
答案 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中对它进行了测试,效果很好。
拖放文件和文件夹后,此屏幕最后会打开以上传内容。
答案 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的内容进行更复杂的上传。