IT story

Amazon S3 Boto-폴더 생성 방법

hot-time 2020. 8. 3. 17:38
반응형

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 콘솔을 새로 고치면 폴더가 나타납니다.


폴더 이름에 "_ $ folder $"를 추가하고 전화를 겁니다.

    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/


이것을 사용하십시오 :

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

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)

S3에는 폴더 구조가 없지만 키라고하는 것이 있습니다.

/2013/11/xyz.xls콘솔에서 폴더를 만들 수 있으며 폴더로 표시됩니다. 그러나 S3의 스토리지 부분은이를 파일 이름으로 사용합니다.

검색 할 때에도 ListObjects메소드와 Prefix매개 변수를 사용 하여 특정 폴더 (또는 키)의 파일을 볼 수 있음을 알 수 있습니다 .


폴더를 만드는 것은 정말 쉽습니다. 실제로 그것은 단지 키를 만드는 것입니다.

You can see my below code i was creating a folder with utc_time as name.

Do remember ends the key with '/' like below, this indicates it's a key:

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

Although you can create a folder by appending "/" to your folder_name. Under the hood, S3 maintains flat structure unlike your regular NFS.

var params = {
            Bucket : bucketName,
            Key : folderName + "/"
        };
s3.putObject(params, function (err, data) {});

Apparently you can now create folders in S3. I'm not sure since when, but I have a bucket in "Standard" zone and can choose Create Folder from Action dropdown.


Tried many method above and adding forward slash / to the end of key name, to create directory didn't work for me:

client.put_object(Bucket="foo-bucket", Key="test-folder/")

You have to supply Body parameter in order to create directory:

client.put_object(Bucket='foo-bucket',Body='', Key='test-folder/')

Source: ryantuck in boto3 issue

참고URL : https://stackoverflow.com/questions/1939743/amazon-s3-boto-how-to-create-a-folder

반응형