如何使用boto
Amazon s3的库在存储桶下创建文件夹?
我按照手册进行操作,并使用许可权,元数据等创建了密钥,但在boto文档中没有描述如何在存储桶下创建文件夹或在存储桶下的文件夹下创建文件夹的内容。
如何使用boto
Amazon s3的库在存储桶下创建文件夹?
我按照手册进行操作,并使用许可权,元数据等创建了密钥,但在boto文档中没有描述如何在存储桶下创建文件夹或在存储桶下的文件夹下创建文件夹的内容。
Answers:
S3中没有文件夹或目录的概念。您可以创建像这样的文件名"abc/xys/uvw/123.jpg"
,许多S3访问工具都可以像S3Fox
目录结构那样显示文件名,但实际上它只是存储桶中的单个文件。
假设您要在存储桶中创建文件夹abc / 123 /,这与Boto一样容易
k = bucket.new_key('abc/123/')
k.set_contents_from_string('')
或使用控制台
new_key()
就是您所需要的。发送给该函数的字符串可以是abc/123/
或abc/123/newfile.txt
。无论您喜欢什么。在尝试获得希望的结果之后,我喜欢将其包装在if语句中:key = bucket.get_key(upgrade_path) if key is None: key = bucket.new_key(upgrade_path)
本质上,如果不存在,请创建它!
mp = self._bucket.initiate_multipart_upload(bucket_key)
使用AWS开发工具包.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控制台,您将看到该文件夹
用这个:
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+'/'))
将“ _ $ folder $”添加到您的文件夹名称并放回电话。
String extension = "_$folder$";
s3.putObject("MyBucket", "MyFolder"+ extension, new ByteArrayInputStream(new byte[0]), null);
参见:http : //www.snowgiraffe.com/tech/147/creating-folders-programmatically-with-amazon-s3s-api-putting-babies-in-buckets/
创建文件夹真的很容易。实际上,它只是在创建密钥。
您可以看到以下代码,我正在创建一个以utc_time为名称的文件夹。
请记住,如下所示以'/'结尾该键,这表明它是键:
键='folder1 /'+ 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
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)
尝试了多种方法,并/
在键名的末尾添加了正斜杠,以创建目录对我不起作用:
client.put_object(Bucket="foo-bucket", Key="test-folder/")
您必须提供Body
参数才能创建目录:
client.put_object(Bucket='foo-bucket',Body='', Key='test-folder/')