2016-08-16 12 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バケットを超えたフォルダはありませんが、オブジェクト(ファイル)は自分の名前に(スラッシュ)/秒を持つことができ、かつ可能にプレフィックスに基づいて取得するための方法がありますあなたはディレクトリリストをエミュレートすることができます。ただし、空のフォルダを作成することはできません。

回避策は空の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 /」と入力します。しかし、バケット内の別のオブジェクトになります。バケツやバケット内の他のオブジェクトの作成や操作には何の影響も与えません。

関連する問題