如何使用适用于Amazon s3的boto
库在存储桶下创建文件夹?
我按照手册,创建了具有权限,元数据等的密钥,但没有在boto的文档中描述如何在存储桶下创建文件夹,或在存储桶中的文件夹下创建文件夹。
答案 0 :(得分:118)
S3中没有文件夹或目录的概念。您可以创建"abc/xys/uvw/123.jpg"
之类的文件名,其中许多S3访问工具(如S3Fox
)显示为目录结构,但它实际上只是一个存储桶中的单个文件。
答案 1 :(得分:45)
假设你想在你的桶中创建文件夹abc / 123 /,它与Boto一块蛋糕
k = bucket.new_key('abc/123/')
k.set_contents_from_string('')
或使用console
答案 2 :(得分:17)
使用AWS SDK .Net可以很好地工作,只需在文件夹名称字符串末尾添加“/”:
var folderKey = folderName + "/"; //end the folder name with "/"
AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(AWSAccessKey, AWSSecretKey);
var request = new PutObjectRequest();
request.WithBucketName(AWSBucket);
request.WithKey(folderKey);
request.WithContentBody(string.Empty);
S3Response response = client.PutObject(request);
然后刷新您的AWS控制台,您将看到文件夹
答案 3 :(得分:8)
将“_ $ folder $”附加到您的文件夹名称并调用put。
String extension = "_$folder$";
s3.putObject("MyBucket", "MyFolder"+ extension, new ByteArrayInputStream(new byte[0]), null);
答案 4 :(得分:4)
使用此:
import boto3
s3 = boto3.client('s3')
bucket_name = "YOUR-BUCKET-NAME"
directory_name = "DIRECTORY/THAT/YOU/WANT/TO/CREATE" #it's name of your folders
s3.put_object(Bucket=bucket_name, Key=(directory_name+'/'))
答案 5 :(得分:3)
2019年更新,如果要创建路径为bucket_name / folder1 / folder2的文件夹,则可以使用以下代码:
from boto3 import client, resource
class S3Helper:
def __init__(self):
self.client = client("s3")
self.s3 = resource('s3')
def create_folder(self, path):
path_arr = path.rstrip("/").split("/")
if len(path_arr) == 1:
return self.client.create_bucket(Bucket=path_arr[0])
parent = path_arr[0]
bucket = self.s3.Bucket(parent)
status = bucket.put_object(Key="/".join(path_arr[1:]) + "/")
return status
s3 = S3Helper()
s3.create_folder("bucket_name/folder1/folder2)
答案 6 :(得分:1)
S3没有文件夹结构,但有一些称为键。
我们可以创建/2013/11/xyz.xls
并在控制台中显示为文件夹。但是S3的存储部分将把它作为文件名。
即使在检索时,我们观察到我们可以使用ListObjects
方法并使用Prefix
参数查看特定文件夹(或键)中的文件。
答案 7 :(得分:1)
创建文件夹非常简单。实际上它只是创建密钥。
你可以看到我的下面的代码我创建了一个名为utc_time的文件夹。
请记住使用下面的' /' 结束密钥,这表明它是一个密钥:
答案='文件夹1 /' + utc_time + ' /'
client = boto3.client('s3')
utc_timestamp = time.time()
def lambda_handler(event, context):
UTC_FORMAT = '%Y%m%d'
utc_time = datetime.datetime.utcfromtimestamp(utc_timestamp)
utc_time = utc_time.strftime(UTC_FORMAT)
print 'start to create folder for => ' + utc_time
putResponse = client.put_object(Bucket='mybucketName',
Key='folder1/' + utc_time + '/')
print putResponse
答案 8 :(得分:1)
虽然您可以通过在文件夹名称后附加“/”来创建文件夹。在引擎盖下,S3保持扁平结构,与常规NFS不同。
var params = { Bucket : bucketName, Key : folderName + "/" }; s3.putObject(params, function (err, data) {});
答案 9 :(得分:0)
显然,您现在可以在S3中创建文件夹。我不知道从什么时候开始,但我在“标准”区域有一个存储桶,可以选择从操作下拉列表中创建文件夹。
答案 10 :(得分:0)
尝试了多种方法,并在键名的末尾添加了斜杠/
,以创建目录对我来说不起作用:
client.put_object(Bucket="foo-bucket", Key="test-folder/")
您必须提供Body
参数才能创建目录:
client.put_object(Bucket='foo-bucket',Body='', Key='test-folder/')