web-dev-qa-db-ja.com

Amazon S3 boto-フォルダーを作成する方法は?

Amazon s3のbotoライブラリを使用して、バケットの下にフォルダーを作成するにはどうすればよいですか?

私はマニュアルに従って、許可、メタデータなどを使用してキーを作成しましたが、botoのドキュメントではバケットの下にフォルダを作成する方法、またはバケット内のフォルダの下にフォルダを作成する方法については説明していません。

108
vito huang

S3にはフォルダまたはディレクトリの概念はありません。 "abc/xys/uvw/123.jpg"などの多くのS3アクセスツールがディレクトリ構造のように表示するS3Foxなどのファイル名を作成できますが、実際にはバケット内の1つのファイルにすぎません。

123
user240469

バケツにフォルダabc/123 /を作成したいとします。これはBotoのケーキです

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

または console を使用します

47
TomNg

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コンソールを更新すると、フォルダーが表示されます

18
elranu

これを使って:

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

フォルダ名に「_ $ 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/

8
Mamad Asgari

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)
3

フォルダーの作成は本当に簡単です。実際には、キーを作成するだけです。

次のコードを見るとわかるように、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
Gabriel Wu

ただし、folder_nameに「/」を追加してフォルダーを作成できます。内部では、S3は通常のNFSとは異なり、フラットな構造を維持します。

 var params = {
 Bucket:bucketName、
 Key:folderName + "/"
}; 
 s3.putObject(params、function(エラー、データ){}); 
1
vpage

S3にはフォルダー構造がありませんが、キーと呼ばれるものがあります。

/2013/11/xyz.xlsを作成でき、コンソールにフォルダーとして表示されます。ただし、S3のストレージ部分はファイル名としてそれを使用します。

取得する場合でも、ListObjectsメソッドを使用してPrefixパラメーターを使用すると、特定のフォルダー(またはキー)のファイルを表示できることがわかります。

1
Balaram

どうやら、S3でフォルダーを作成できるようになりました。いつからかわかりませんが、「標準」ゾーンにバケットがあり、「アクション」ドロップダウンから「フォルダーの作成」を選択できます。

0
Perelx