如何使用botoAmazon s3的库在存储桶下创建文件夹?
我按照手册,创建了具有权限,元数据等的密钥,但没有在boto的文档中描述如何在存储桶下创建文件夹,或在存储桶中的文件夹下创建文件夹.
小智 126
S3中没有文件夹或目录的概念.你可以创建文件名,像"abc/xys/uvw/123.jpg"许多S3访问工具一样S3Fox显示目录结构,但它实际上只是一个桶中的单个文件.
Tom*_*mNg 47
假设你想要在你的桶中创建文件夹abc/123 /,这对于Boto来说是件小事
k = bucket.new_key('abc/123/')
k.set_contents_from_string('')
Run Code Online (Sandbox Code Playgroud)
或者使用控制台
elr*_*anu 19
使用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);
Run Code Online (Sandbox Code Playgroud)
然后刷新AWS控制台,您将看到该文件夹
用这个:
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+'/'))
Run Code Online (Sandbox Code Playgroud)
小智 7
将"_ $ folder $"附加到您的文件夹名称并调用put.
String extension = "_$folder$";
s3.putObject("MyBucket", "MyFolder"+ extension, new ByteArrayInputStream(new byte[0]), null);
Run Code Online (Sandbox Code Playgroud)
请参阅:http: //www.snowgiraffe.com/tech/147/creating-folders-programmatically-with-amazon-s3s-api-putting-babies-in-buckets/
小智 5
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)
Run Code Online (Sandbox Code Playgroud)
尝试了上面的许多方法并/在键名的末尾添加正斜杠,以创建目录对我不起作用:
client.put_object(Bucket="foo-bucket", Key="test-folder/")
Run Code Online (Sandbox Code Playgroud)
您必须提供Body参数才能创建目录:
client.put_object(Bucket='foo-bucket',Body='', Key='test-folder/')
Run Code Online (Sandbox Code Playgroud)