Amazon S3 Library for REST in Java使用メモ
mixiアプリなど画像置き場としてS3を使っていて、
更新のたびにCloudBerry Explorerでアップロードしてたけど、
さすがに面倒になってきたのでファイルを同期するためのツールを作成しました。
そのために、Amazon S3 Library for REST in Javaを使ってみたので防備録がわりにメモ。
AWSに接続
AWSAuthConnection conn = new AWSAuthConnection(awsAccessKeyId, awsSecretAccessKey);
バケットの作成/削除
//バケットが存在しなければ、バケットを作成する if (!conn.checkBucketExists(bucketName)) { conn.createBucket(bucketName, AWSAuthConnection.LOCATION_DEFAULT, null); } //バケットを削除 conn.deleteBucket(bucketName, null)
バケット内のオブジェクト一覧を取得
//結果は [test.txt, funyatalk.jpg, help/, help/test.html, floor/desert.swf] のように返ってくる List entries = conn.listBucket(bucketName, null, null, null, null).entries
オブジェクトを保存
//HTTPヘッダを指定してオブジェクトを保存 Map headers = new TreeMap(); headers.put("Content-Type", Arrays.asList(new String[] { "text/plain" })); headers.put("Expires", Arrays.asList(new String[] { "Tue, 10 Dec 2019 13:43:40 GMT" })); headers.put("Cache-Control", Arrays.asList(new String[] { "public, max-age=315360000" })); conn.put(bucketName, keyName, object, headers).connection.getResponseMessage()
オブジェクトをコピー
Map updateMetadata = new TreeMap(); updateMetadata.put("metadata-key", Arrays.asList("this will be the metadata in the copied key")); conn.copy( bucketName, copiedKeyName, bucketName, copiedKeyName, updateMetadata, null );
オブジェクトを削除
conn.delete(bucketName, keyName, null)
ACLを設定
//ACLはxmlを文字列として渡すことで設定する conn.putACL(bucketName, keyName, xml, null);
ちなみに、すべてのユーザが読み込みできるようにするには、以下のようなXMLを指定する。
<?xml version=\"1.0\" encoding=\"UTF-8\"?> <AccessControlPolicy xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\"> <Owner> <ID>XXXXXX</ID> <DisplayName>funya</DisplayName> </Owner> <AccessControlList> <Grant> <Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"CanonicalUser\"> <ID>XXXXXX</ID> <DisplayName>funya</DisplayName> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> <Grant> <Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"Group\"> <URI>http://acs.amazonaws.com/groups/global/AllUsers</URI> </Grantee> <Permission>READ</Permission> </Grant> </AccessControlList> </AccessControlPolicy>