Cloud Storage API V2(Java)を使用して、
Cloud Storageのオブジェクトのコピー・置換する方法
についてご紹介します。
APIを利用する環境の準備から始める場合や、コードを実行する際は、
⧉[Cloud Storage API(V2)] JavaでCloud Storageを使う
を参照ください。
| No | 目次 | ||
|---|---|---|---|
| 1 | オブジェクトをコピー | ||
| 1 | スコープ | ||
| 2 | 実行 | ||
| 3 | レスポンスの内容 | ||
| 2 | オブジェクトを置換 | ||
| 1 | スコープ | ||
| 2 | 実行 | ||
| 3 | レスポンスの内容 |
1. オブジェクトをコピー
指定したオブジェクトをコピーします。
1.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
StorageScopes.CLOUD_PLATFORM
StorageScopes.DEVSTORAGE_FULL_CONTROL
StorageScopes.DEVSTORAGE_READ_WRITE
⧉[Cloud Storage API(V2)] JavaでCloud Storageを使う(2.2 Storageインスタンスを取得)
でスコープを指定してください。
1.2. 実行
public static void main(String[] args) throws Exception{
Storage storage = getStorage();
Storage.Objects objects = storage.objects();
StorageObject content = new StorageObject();
Storage.Objects.Copy copy = objects.copy(
"コピー元のバケットID",
"コピー元のオブジェクト名",
"コピー先のバケットID",
"コピー先のオブジェクト名"
,content);
StorageObject res = copy.execute();
System.out.println(res);
}
1.2.1. HTTPリクエスト
POST: https://storage.googleapis.com/storage/v1/b/{コピー元のバケットID}/o/{コピー元のオブジェクト名}/copyTo/b/{コピー先のバケットID}/o/{コピー先のオブジェクト名}
が実行されます。
1.2.2. クエリパラメータ
Storage.Objects.Copyのsetメソッドにより、クエリパラメータを追加できます。
| メソッド | 引数 | 説明 |
|---|---|---|
| setSourceGeneration | Long | コピー先の世代番号(generation) |
| setIfGenerationMatch | Long | コピー元の世代番号(generation)と一致する場合のみ処理を行う |
| setIfGenerationNotMatch | Long | コピー元の世代番号(generation)と一致しない場合のみ処理を行う |
| setIfMetagenerationMatch | Long | コピー元のメタ世代番号(metageneration)と一致する場合のみ処理を行う |
| setIfMetagenerationNotMatch | Long | コピー元のメタ世代番号(metageneration)と一致しない場合のみ処理を行う |
| setIfSourceGenerationMatch | Long | コピー先の世代番号(generation)と一致する場合のみ処理を行う |
| setIfSourceGenerationNotMatch | Long | コピー先の世代番号(generation)と一致しない場合のみ処理を行う |
| setIfSourceMetagenerationMatch | Long | コピー先のメタ世代番号(metageneration)と一致する場合のみ処理を行う |
| setIfSourceMetagenerationNotMatch | Long | コピー先のメタ世代番号(metageneration)と一致しない場合のみ処理を行う |
| setProjection | String | レスポンスとして受け取るプロパティの指定 "full"(全てのプロパティ)、"noAcl"(ACL以外のプロパティ) |
| setDestinationPredefinedAcl | String | コピー元のバケットに定義するアクセス制御リスト(ACL)の定義 |
| setDestinationKmsKeyName | String | コピー元のオブジェクトの暗号化に使用されるCloud KMS 鍵のリソース名 |
アクセス制御リスト(ACL)の定義
| 定義値 | 内容 |
|---|---|
| authenticatedRead | プロジェクトチームの所有者がOWNERアクセス権を取得し、アクセス権allAuthenticatedUsersを取得 |
| private | プロジェクトチームの所有者がOWNERアクセス権を取得 |
| projectPrivate | プロジェクトチームのメンバーは、それぞれの役割に応じてアクセス権を取得 |
| publicRead | プロジェクトチームの所有者がOWNERアクセス権を取得し、 アクセス権allUsersを取得 |
| publicReadWrite | プロジェクトチームの所有者がOWNERアクセス権を取得し、アクセス権allUsersを取得 |
1.2.3. リクエストボディ
StorageObjectのsetメソッドにより、クエリパラメータを追加できます。
| メソッド | 引数 | 説明 |
|---|---|---|
| setName | String | オブジェクトの名前 |
| setAcl | List<ObjectAccessControl> | オブジェクトのアクセスコントロール |
| setContentDisposition | String | Contentオブジェクトデータの配置 |
| setContentEncoding | String | Contentオブジェクトデータのエンコーディング |
| setContentLanguage | String | Contentオブジェクトデータの言語 |
| setContentType | String | ContentオブジェクトデータのContent-Type |
| setEventBasedHold | Boolean | オブジェクトがイベントベースの保留の対象か |
| setMd5Hash | String | データのMD5ハッシュ値 |
| setMetadata | Map<String,String> | ユーザーが提供するメタデータ |
| setRetention | StorageObject.Retention | オブジェクトの保持設定 |
| setStorageClass | String | オブジェクトのストレージクラス |
| setTemporaryHold | Boolean | オブジェクトが 一時保留の対象か |
| setCustomTime | DateTime | ユーザー指定のタイムスタンプ |
| setCrc32c | String | CRC32c チェックサム |
ObjectAccessControl(Set)
| メソッド | 引数 | 説明 |
|---|---|---|
| setEntity | String | 権限を保持するエンティティ 次のいずれかの形式 user-{email} group-{groupId} group-{email} domain-{domain} project-{team-projectId} allUsers allAuthenticatedUsers |
| setRole | String | エンティティのアクセス許可 "OWNER"、"READER"、"WRITER" |
StorageObject.Retention(Set)
| メソッド | 引数 | 説明 |
|---|---|---|
| setMode | String | 保持設定のモード "Unlocked"(変更可)、"Locked"(変更不可) |
| setRetainUntilTime | DateTime | オブジェクトを削除または置換が可能になった時刻 |
1.3. レスポンスの内容
StorageObject
| メソッド | 戻り値 | 説明 |
|---|---|---|
| getId | String | オブジェクトID |
| getKind | String | リソースの種類 固定文字列:"storage#object" |
| getName | String | オブジェクトの名前 |
| getBucket | String | バケット名 |
| getSize | BigInteger | データサイズ(バイト単位) |
| getGeneration | Long | 世代番号(generation) |
| getMetageneration | Long | メタ世代番号(metageneration) |
| getEtag | String | オブジェクトのHTTPエンティティタグ |
| getMediaLink | String | オブジェクトのデータをダウンロードするためのURL |
| getSelfLink | String | オブジェクトのURL |
| getAcl | List<ObjectAccessControl> | オブジェクトのアクセスコントロール |
| getCacheControl | String | オブジェクトデータのCache-Controlディレクティブ |
| getComponentCount | Integer | 複合オブジェクトの場合の非複合オブジェクトの数 |
| getContentDisposition | String | Contentオブジェクトデータの配置 |
| getContentEncoding | String | Contentオブジェクトデータのエンコーディング |
| getContentLanguage | String | Contentオブジェクトデータの言語 |
| getContentType | String | ContentオブジェクトデータのContent-Type |
| getCustomerEncryption | StorageObject.CustomerEncryption | 顧客が指定した暗号化キーのメタデータ |
| getEventBasedHold | Boolean | オブジェクトがイベントベースの保留の対象か |
| getKmsKeyName | String | このオブジェクトの暗号化に使用されるCloudKMS鍵 |
| getMd5Hash | String | データのMD5ハッシュ値 |
| getMetadata | Map<String,String> | ユーザーが提供するメタデータ |
| getOwner | StorageObject.Owner | オブジェクトの所有者 |
| getRetention | StorageObject.Retention | オブジェクトの保持設定 |
| getRetentionExpirationTime | DateTime | オブジェクトが削除可能なる最も早い時間 |
| getSoftDeleteTime | DateTime | オブジェクトが論理的に削除された時刻 |
| getHardDeleteTime | DateTime | 論理的に削除されたオブジェクトが完全に削除された時刻 |
| getStorageClass | String | オブジェクトのストレージクラス |
| getTemporaryHold | Boolean | オブジェクトが 一時保留の対象か |
| getTimeCreated | DateTime | オブジェクトの作成時刻 |
| getTimeDeleted | DateTime | オブジェクトの削除時刻 |
| getTimeStorageClassUpdated | DateTime | オブジェクトのストレージクラスが最後に変更された時刻 |
| getCustomTime | DateTime | ユーザー指定のタイムスタンプ |
| getUpdated | DateTime | オブジェクトのメタデータ変更時刻 |
ObjectAccessControl
| メソッド | 戻り値 | 説明 |
|---|---|---|
| getKind | String | リソースの種類 固定文字列:"storage#objectAccessControl" |
| getDomain | String | エンティティに関連付けられているドメイン |
| getEmail | String | エンティティに関連付けられているメールアドレス |
| getEntity | String | 権限を保持するエンティティ 次のいずれかの形式 user-{email} group-{groupId} group-{email} domain-{domain} project-{team-projectId} allUsers allAuthenticatedUsers |
| getEntityId | String | エンティティID |
| getEtag | String | アクセス制御エントリのHTTPエンティティタグ |
| getProjectTeam | ObjectAccessControl.ProjectTeam | エンティティに関連付けられているプロジェクトチーム |
| getRole | String | エンティティのアクセス許可 "OWNER"、"READER"、"WRITER" |
ObjectAccessControl.ProjectTeam
| メソッド | 戻り値 | 説明 |
|---|---|---|
| getProjectNumber | String | プロジェクト番号 |
| getTeam | String | チーム役割 "editors"、"owners"、"viewers" |
StorageObject.CustomerEncryption
| メソッド | 戻り値 | 説明 |
|---|---|---|
| getEncryptionAlgorithm | String | 暗号化アルゴリズム |
| getKeySha256 | String | 暗号化キーの SHA256 ハッシュ値 |
StorageObject.Owner
| メソッド | 戻り値 | 説明 |
|---|---|---|
| getEntity | String | エンティティ |
| getEntityId | String | エンティティID |
StorageObject.Retention
| メソッド | 戻り値 | 説明 |
|---|---|---|
| getMode | String | 保持設定のモード "Unlocked"(変更可)、"Locked"(変更不可) |
| getRetainUntilTime | DateTime | オブジェクトを削除または置換が可能になった時刻 |
2. オブジェクトを置換
指定したオブジェクトを置換します。
2.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
StorageScopes.CLOUD_PLATFORM
StorageScopes.DEVSTORAGE_FULL_CONTROL
StorageScopes.DEVSTORAGE_READ_WRITE
⧉[Cloud Storage API(V2)] JavaでCloud Storageを使う(2.2 Storageインスタンスを取得)
でスコープを指定してください。
2.2. 実行
public static void main(String[] args) throws Exception{
Storage storage = getStorage();
Storage.Objects objects = storage.objects();
StorageObject content = new StorageObject();
Storage.Objects.Rewrite rewrite = objects.rewrite(
"置換元のバケットID",
"置換元のオブジェクト名",
"置換先のバケットID",
"置換先のオブジェクト名"
,content);
RewriteResponse res = rewrite.execute();
System.out.println(res);
}
2.2.1. HTTPリクエスト
POST: https://storage.googleapis.com/storage/v1/b/{置換元のバケットID}/o/{置換元のオブジェクト名}/rewriteTo/b/{置換先のバケットID}/o/{置換先のオブジェクト名}
が実行されます。
2.2.2. クエリパラメータ
Storage.Objects.Rewriteのsetメソッドにより、クエリパラメータを追加できます。
| メソッド | 引数 | 説明 |
|---|---|---|
| setMaxBytesRewrittenPerCall | Long | 再書き込みリクエストごとに再書き込みされる最大バイト数 |
| setRewriteToken | String | 各再書き込み要求にこのフィールド |
| setSourceGeneration | Long | コピー先の世代番号(generation) |
| setIfGenerationMatch | Long | コピー元の世代番号(generation)と一致する場合のみ処理を行う |
| setIfGenerationNotMatch | Long | コピー元の世代番号(generation)と一致しない場合のみ処理を行う |
| setIfMetagenerationMatch | Long | コピー元のメタ世代番号(metageneration)と一致する場合のみ処理を行う |
| setIfMetagenerationNotMatch | Long | コピー元のメタ世代番号(metageneration)と一致しない場合のみ処理を行う |
| setIfSourceGenerationMatch | Long | コピー先の世代番号(generation)と一致する場合のみ処理を行う |
| setIfSourceGenerationNotMatch | Long | コピー先の世代番号(generation)と一致しない場合のみ処理を行う |
| setIfSourceMetagenerationMatch | Long | コピー先のメタ世代番号(metageneration)と一致する場合のみ処理を行う |
| setIfSourceMetagenerationNotMatch | Long | コピー先のメタ世代番号(metageneration)と一致しない場合のみ処理を行う |
| setProjection | String | レスポンスとして受け取るプロパティの指定 "full"(全てのプロパティ)、"noAcl"(ACL以外のプロパティ) |
| setDestinationPredefinedAcl | String | コピー元のバケットに定義するアクセス制御リスト(ACL)の定義 |
| setDestinationKmsKeyName | String | コピー元のオブジェクトの暗号化に使用されるCloud KMS 鍵のリソース名 |
2.2.3. リクエストボディ
StorageObjectのsetメソッドにより、クエリパラメータを追加できます。
1.2.3. リクエストボディと同じです。
2.3. レスポンスの内容
RewriteResponse
| メソッド | 戻り値 | 説明 |
|---|---|---|
| getKind | String | リソースの種類 固定文字列:"storage#rewriteResponse" |
| getTotalBytesRewritten | Long | 書き込まれた合計バイト数 |
| getObjectSize | Long | コピーされるオブジェクトの合計サイズ (バイト単位) |
| getDone | Boolean | コピーが完了したか |
| getRewriteToken | String | データのコピーを続行するための後続のリクエストで使用するトークン |
| getResource | StorageObject | コピー先のオブジェクトのメタデータを含むリソース |
おしまい。。