[amazon-s3] Amazon S3 Boto-폴더를 생성하는 방법은 무엇입니까?

botoAmazon s3 용 라이브러리를 사용하여 버킷 아래에 폴더를 생성하려면 어떻게 해야합니까?

설명서에 따라 권한, 메타 데이터 등을 사용하여 키를 만들었지 만 boto 문서에서 버킷 아래에 폴더를 만드는 방법이나 버킷의 폴더 아래에 폴더를 만드는 방법을 설명하는 곳은 없습니다.



답변

S3에는 폴더 또는 디렉토리 개념이 없습니다. 같은 "abc/xys/uvw/123.jpg"많은 S3 액세스 도구 S3Fox가 디렉터리 구조 처럼 표시 되는 파일 이름을 만들 수 있지만 실제로는 버킷에있는 단일 파일입니다.


답변

버킷에 abc / 123 / 폴더를 만들고 싶다고 가정 해 보겠습니다. Boto와 함께라면 케이크 조각입니다.

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

또는 콘솔 사용


답변

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을 이름으로 사용하여 폴더를 만들고 있던 아래 코드를 볼 수 있습니다.

아래처럼 ‘/’로 키를 끝내는 것을 기억하십시오. 이것은 키 임을 나타냅니다.

키 = ‘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)