2012-07-15 3 views
17

私はAWS Java SDKに慣れていますが、対応するJavadocをブラウズしようとしましたが、どのようにサブディレクトリ、つまりディレクトリバケット内のオブジェクト、およびファイルをどのようにアップロードするのかを指定します。Amazon Webサービス(AWS)S3 Javaはサブディレクトリ(オブジェクト)を作成

bucketNamedirNameは、私は次のことを試してみました(公開許可を得て)既存のバケットとバケット内に作成する必要があり、新たな(オブジェクト)のディレクトリ(すなわちbucketName/dirNameに/)

に対応仮定します。

AmazonS3Client s3 = new AmazonS3Client(
    new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY)); 
s3.createBucket(bucketName + "/" + dirName); //throws exception 

2行目で例外がスローされます。

サブディレクトリを作成してファイルをアップロードするための短いスニペットは、深く感謝します。

答えて

29

S3には「サブディレクトリ」はありません。バケットがあり、バケット内にキーがあります。

プレフィックス検索を使用して従来のディレクトリをエミュレートできます。

foo/bar1 
foo/bar2 
foo/bar3 
blah/baz1 
blah/baz2 

、その後foo/のプレフィックス検索を行うと、あなたが戻って取得します:たとえば、あなたはバケツで次のキーを格納することができます

foo/bar1 
foo/bar2 
foo/bar3 

は詳細についてAmazonS3.listObjectsを参照してください。


更新:

ObjectListing listing = s3.listObjects("someBucket", "foo/"); 

s3.putObject("someBucket", "foo/bar1", file1); 
s3.putObject("someBucket", "foo/bar2", file2); 
... 

は、その後、あなたがfoo/で始まるすべてのキーを一覧表示することができます:すでに既存のバケツを持っていると仮定すると、そのバケットの下のキーは、/含まれています

+0

が短いスニペットコードを入力してください可能性があり、ご返信いただきありがとうございますか!私のポストで見るように、私は 'foo/bar'のようなものを作成しようとしましたが、例外がスローされます。 – MrRoth

+0

@MrRoth:私の更新を参照してください。 – casablanca

18

S3では、オペレーティングシステムでこれを行う従来の方法でディレクトリが表示されません。カサブランカは、すでにあなたがこのようなディレクトリにファイルをアップロードすることができます言ったように

public static void createFolder(String bucketName, String folderName, AmazonS3 client) { 
    // create meta-data for your folder and set content-length to 0 
    ObjectMetadata metadata = new ObjectMetadata(); 
    metadata.setContentLength(0); 

    // create empty content 
    InputStream emptyContent = new ByteArrayInputStream(new byte[0]); 

    // create a PutObjectRequest passing the folder name suffixed by/
    PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, 
       folderName + SUFFIX, emptyContent, metadata); 

    // send request to S3 to create folder 
    client.putObject(putObjectRequest); 
} 

s3.putObject("someBucket", "foo/bar1", file1); 

は、詳細については、全体のチュートリアルhereを読んで、そして最も重要なことはここで は、ディレクトリを作成する方法でありますあなたはディレクトリを削除する方法を見つけるでしょうか?

+1

チャームのように働いた! – SexyBeast

0

フォルダを作成したいならば、あなたはのfolder1を作成するには、次のキーを使用してコマンドを入れて使用する必要があります。バケットのルートに

- >のfolder1/folder1_ $パスフォルダ2に$

をフォルダ/ FOLDER3/- >フォルダ2/FOLDER3/folder1の/ folder1_ $フォルダ$

それは常にall_previous_folders /フォルダ名/ folderName_ $フォルダ$

関連する問題