2016-08-16 5 views
0

S3 amazon 버킷 내에 폴더를 만들려고하는데 필요한 문서를 제대로 설명하는 데 필요한 설명서를 찾기가 어렵습니다. 나는 폴더를 만들기위한 다음 코드/의사 코드를 가지고있다. 사람이 설명하거나 내가 코드PHP를 사용하여 S3 버킷 내에 폴더를 만드는 방법

use vendor\aws\S3\S3Client; 

$bucket_url = 'https://***.amazonaws.com/***/'; 
$folder_name = $username . '/'; 

$s3Client = new vendor\aws\S3\S3Client([ 
     'version' => AWS_VERSION, 
     'region' => AWS_REGION, 
     'credentials' => [ 
      'key' => AWS_KEY, 
      'secret' =>AWS_SECRET, 
     ], 
    ]); 

    $s3Client->putObject(array(
     'Bucket' => AWS_BUCKET, // Defines name of Bucket 
     'Key' => AWS_PATH . $folder_name, //Defines Folder name 
     'Body' => "", 
    )); 

답변

2

S3는 이름에/s의 (슬래시) 할 수 있습니다 버킷 넘어 폴더하지만, 객체 (파일)을하지 않고, 할 수있는 접두사를 기반으로 검색하는 방법이 있습니다를 디렉토리 목록을 에뮬레이트 할 수 있습니다. 이것은 빈 폴더를 만들 수 없다는 것을 의미합니다.

그래서 주위에 비어있는 txt 파일을 넣고 와드 다음에 삭제하지만 폴더 구조는 유지됩니다.

/* function to upload empty test.txt file to subfolders /folder/ on S3 bucketname */ 
$s3->putObjectFile(‘test.txt’, ‘bucketname’, ‘/folder/test.txt’, S3::ACL_PUBLIC_READ); 

/* function to delete empty test.txt file to subfolders /folder/ on S3 bucketname */ 
$s3->deleteObject(‘bucketname’, ‘/folder/test.txt’); 
+2

"해결 방법은 빈 txt 파일을 넣고 병동 후에 삭제하지만 폴더 구조는 유지됩니다." 이것은 사실이 아닙니다. 생성 된 폴더가 없으면 개체를 삭제 한 후에도 폴더가 유지되지 않습니다. –

+0

@MattHouser 여기서 "/folder/test.txt"폴더에 빈 txt 파일을 넣었을 때 "test.txt"를 삭제하면 폴더가 남아 있습니다. – error2007s

+0

PHP 클라이언트의'putObjectFile' 메소드에 내장 된 부작용이 있습니까?AWS API의 표준 동작은 아닙니다. putObjectFile은 레거시 메소드입니다. PHP의'putObject' 메소드, 현대 버전도 그렇게할까요? –

4

Amazon S3 doesn't really have directories 내에 배치 할 필요가있는 인수의 샘플을 제공 할 수 있습니다

아마존 S3에

, 버킷 및 객체는 객체가 버킷에 저장되어있는 주요 자원이다를 . Amazon S3는 일반 파일 시스템에서와 같이 계층 구조가없는 평면 구조를 가지고 있습니다. 그러나 조직의 단순성을 위해 Amazon S3 콘솔은 오브젝트를 그룹화하는 수단으로 폴더 개념을 지원합니다. Amazon S3는 객체에 키 이름 접두사를 사용하여이 작업을 수행합니다.

대신 객체의 키 이름을 기준으로 가짜입니다. some/directory/file.txt과 같은 키를 사용하여 객체를 업로드하기 만하면 AWS 콘솔의 S3 인터페이스를 비롯한 많은 도구는 some 디렉토리에 directory이라는 디렉토리에 file.txt이라는 객체가있는 것처럼 행동합니다.

도 참조 Amazon S3 boto - how to create a folder?

4

Amazon S3에는 폴더 개념이 없습니다. S3의 경우 모든 객체는 단순히 데이터가있는 키 이름입니다.

폴더는 '/'문자를 사용하여 폴더를 구분하는 개념입니다. 그러나 S3는 상관하지 않습니다.

많은 타사 도구 (AWS 관리 콘솔까지도)를 사용할 때 도구는 종종 접두사 아래의 객체 키를보고 '/'가 표시되면이를 폴더.

그러나 "폴더를 만들 수있는 방법이 없습니다."

원하는 전체 경로 (예 : "my/desired/folder/structure/file.txt")가있는 키가있는 객체 인 PutObject을 Amazon S3에 배치하면됩니다. 파일을 생성하기 전에 폴더가 있어야하는 파일 시스템이 많지 않습니다.

당신이 할 수있는 "폴더 만들기"에 가장 가까운 것은 0 바이트 개체를 키 끝에 '/'기호로 만드는 것입니다. 예를 들어 "my/desired/folder/structure /"와 같습니다. 그러나 그것은 양동이에있는 또 다른 객체 일 것입니다. 버킷이나 버켓의 다른 객체를 생성하거나 조작하는 데 아무런 영향을 미치지 않습니다.