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);
폴더를 만드는 것은 정말 쉽습니다. 사실 그것은 단지 키를 만드는 것입니다.
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/')
출처 : boto3 문제의 ryantuck