boto
Amazon s3のライブラリを使用してバケットの下にフォルダーを作成するにはどうすればよいですか?
私はマニュアルに従って、権限、メタデータなどでキーを作成しましたが、botoのドキュメントのどこにも、バケットの下にフォルダーを作成する方法、またはバケット内のフォルダーの下にフォルダーを作成する方法が記載されていません。
boto
Amazon s3のライブラリを使用してバケットの下にフォルダーを作成するにはどうすればよいですか?
私はマニュアルに従って、権限、メタデータなどでキーを作成しましたが、botoのドキュメントのどこにも、バケットの下にフォルダーを作成する方法、またはバケット内のフォルダーの下にフォルダーを作成する方法が記載されていません。
回答:
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 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コンソールを更新すると、フォルダーが表示されます
これを使って:
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 $」を追加して、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/
フォルダを作成するのは本当に簡単です。実際には、キーを作成するだけです。
以下のコードを見ると、名前に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
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/')