Amazon S3 boto - 如何创建文件夹?

问题描述 投票:102回答:10

如何使用适用于Amazon s3的boto库在存储桶下创建文件夹?

我按照手册,创建了具有权限,元数据等的密钥,但没有在boto的文档中描述如何在存储桶下创建文件夹,或在存储桶中的文件夹下创建文件夹。

amazon-s3 boto
10个回答
122
投票

S3中没有文件夹或目录的概念。您可以创建像"abc/xys/uvw/123.jpg"这样的文件名,S3Fox等许多S3访问工具都像目录结构一样显示,但它实际上只是一个桶中的单个文件。


0
投票

显然,您现在可以在S3中创建文件夹。我不知道从什么时候开始,但我在“标准”区域有一个存储桶,可以选择从操作下拉列表中创建文件夹。


46
投票

假设你想要在你的桶中创建文件夹abc / 123 /,这对于Boto来说是件小事

k = bucket.new_key('abc/123/')
k.set_contents_from_string('')

或者使用console


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控制台,您将看到该文件夹


8
投票

将“_ $ folder $”附加到您的文件夹名称并调用put。

    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/


6
投票

用这个:

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+'/'))

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)

1
投票

S3没有文件夹结构,但有一些称为键。

我们可以创建/2013/11/xyz.xls,并在控制台中显示为文件夹。但是S3的存储部分将把它作为文件名。

即使在检索时,我们观察到我们可以通过使用ListObjects方法和使用Prefix参数来查看特定文件夹(或键)中的文件。


1
投票

创建文件夹真的很容易。实际上它只是创建键。

你可以看到我的下面的代码我正在创建一个名为utc_time的文件夹。

请记住用下面的'/'结束键,这表明它是一个关键:

Key ='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

1
投票

虽然您可以通过在文件夹名称后附加“/”来创建文件夹。在引擎盖下,S3保持扁平结构,与常规NFS不同。

var params = {
            Bucket : bucketName,
            Key : folderName + "/"
        };
s3.putObject(params, function (err, data) {});
© www.soinside.com 2019 - 2024. All rights reserved.