Cloud Storage API V2(Java)を使用して、
Cloud Storageのオブジェクトの保存(アップロード)・更新・削除する方法
についてご紹介します。
APIを利用する環境の準備から始める場合や、コードを実行する際は、
⧉[Cloud Storage API(V2)] JavaでCloud Storageを使う
を参照ください。
No | 目次 | ||
---|---|---|---|
1 | オブジェクトを保存 | ||
1 | スコープ | ||
2 | 実行 | ||
3 | レスポンスの内容 | ||
2 | オブジェクトを上書き | ||
1 | スコープ | ||
2 | 実行 | ||
3 | レスポンスの内容 | ||
3 | オブジェクトを更新 | ||
1 | スコープ | ||
2 | 実行 | ||
3 | レスポンスの内容 | ||
4 | オブジェクトを削除 | ||
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. 実行
「オブジェクト名」は、アップロードするファイル名とフォルダのパスを指定します。
例えば、「test_file.csv」をいうファイルを./Folder1/Folder2の下にアップロードしたい場合、
「Folder1/Folder2/test_file.csv」と指定します。
ファイルパスに指定したフォルダが存在しない場合は、フォルダも作成されます。
サンプルでは、データのみをアップロードしていますので
setUploadType("media")にして、StorageObjectをnullで渡しています。
public static void main(String[] args) throws Exception{
Storage storage = getStorage();
Storage.Objects objects = storage.objects();
try(FileInputStream input = new FileInputStream("アップロードするファイルパス")){
InputStreamContent mediaContent = new InputStreamContent("アップロードするファイルのMimeType", input);
Storage.Objects.Insert insert = objects.insert("バケットID",null,mediaContent);
insert.setName("オブジェクト名");
insert.setUploadType("media");
StorageObject res = insert.execute();
System.out.println(res);
}
}
1.2.1. HTTPリクエスト
POST: https://storage.googleapis.com/upload/storage/v1/b/{バケットID}/o
が実行されます。
1.2.2. クエリパラメータ
Storage.Objects.Insertのsetメソッドにより、クエリパラメータを追加できます。
メソッド | 引数 | 説明 |
---|---|---|
setName | String | 【必須】オブジェクト名 |
setUploadType | String | 【必須】アップロードの方法 |
setContentEncoding | String | コンテンツのエンコーディング |
setIfGenerationMatch | Long | 世代番号(generation)と一致する場合のみ処理を行う |
setIfGenerationNotMatch | Long | 世代番号(generation)と一致しない場合のみ処理を行う |
setIfMetagenerationMatch | Long | メタ世代番号(metageneration)と一致する場合のみ処理を行う |
setIfMetagenerationNotMatch | Long | メタ世代番号(metageneration)と一致しない場合のみ処理を行う |
setKmsKeyName | String | オブジェクトの暗号化に使用されるCloud KMS 鍵のリソース名 |
setPredefinedAcl | String | バケットに定義するアクセス制御リスト(ACL)の定義 |
setProjection | String | レスポンスとして受け取るプロパティの指定 "full"(全てのプロパティ)、"noAcl"(ACL以外のプロパティ) |
アップロードの方法
定義値 | 内容 |
---|---|
media | データのみのアップロード |
multipart | マルチパートアップロード。データとメタデータの両方をアップロード |
resumable | メタデータ、データの順にアップロード |
アクセス制御リスト(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. オブジェクトを上書き
指定したオブジェクトを上書きします。
3. オブジェクトを更新と違うところは、
指定したオブジェクトを新しいオブジェクトに置き換えます。
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. 実行
オブジェクト名は、StorageObjectのgetName()で取得できる値を使用します。
public static void main(String[] args) throws Exception{
Storage storage = getStorage();
Storage.Objects objects = storage.objects();
StorageObject content = new StorageObject();
//上書き内容を設定
Storage.Objects.Update update = objects.update("バケットID","オブジェクト名",content);
StorageObject res = update.execute();
System.out.println(res);
}
2.2.1. HTTPリクエスト
PUT: https://storage.googleapis.com/storage/v1/b/{バケットID}/o/{オブジェクト名}
が実行されます。
2.2.2. クエリパラメータ
Storage.Objects.Updateのsetメソッドにより、クエリパラメータを追加できます。
メソッド | 引数 | 説明 |
---|---|---|
setGeneration | Long | 世代番号(generation) |
setOverrideUnlockedRetention | Boolean | ロックが解除された保持構成を持つオブジェクトに適用するか |
setIfGenerationMatch | Long | 世代番号(generation)と一致する場合のみ処理を行う |
setIfGenerationNotMatch | Long | 世代番号(generation)と一致しない場合のみ処理を行う |
setIfMetagenerationMatch | Long | メタ世代番号(metageneration)と一致する場合のみ処理を行う |
setIfMetagenerationNotMatch | Long | メタ世代番号(metageneration)と一致しない場合のみ処理を行う |
setPredefinedAcl | String | バケットに定義するアクセス制御リスト(ACL)の定義 |
setProjection | String | レスポンスとして受け取るプロパティの指定 "full"(全てのプロパティ)、"noAcl"(ACL以外のプロパティ) |
2.2.3. リクエストボディ
StorageObjectのsetメソッドにより、クエリパラメータを追加できます。
1.2.3. リクエストボディと同じです。
2.3. レスポンスの内容
StorageObject
1.3. レスポンスの内容(StorageObject)と同じです。
3. オブジェクトを更新
指定したオブジェクトのメタデータを更新します。
2. オブジェクトを上書きと違うところは、
指定したオブジェクトのメタデータのみを更新します。
3.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
StorageScopes.CLOUD_PLATFORM
StorageScopes.DEVSTORAGE_FULL_CONTROL
StorageScopes.DEVSTORAGE_READ_WRITE
⧉[Cloud Storage API(V2)] JavaでCloud Storageを使う(2.2 Storageインスタンスを取得)
でスコープを指定してください。
3.2. 実行
オブジェクト名は、StorageObjectのgetName()で取得できる値を使用します。
public static void main(String[] args) throws Exception{
Storage storage = getStorage();
Storage.Objects objects = storage.objects();
StorageObject content = new StorageObject();
//更新内容を設定
Storage.Objects.Patch patch = objects.patch("バケットID","オブジェクト名",content);
StorageObject res = patch.execute();
System.out.println(res);
}
3.2.1. HTTPリクエスト
PATCH: https://storage.googleapis.com/storage/v1/b/{バケットID}/o/{オブジェクト名}
が実行されます。
3.2.2. クエリパラメータ
Storage.Objects.Patchのsetメソッドにより、クエリパラメータを追加できます。
メソッド | 引数 | 説明 |
---|---|---|
setGeneration | Long | 世代番号(generation) |
setOverrideUnlockedRetention | Boolean | ロックが解除された保持構成を持つオブジェクトに適用するか |
setIfGenerationMatch | Long | 世代番号(generation)と一致する場合のみ処理を行う |
setIfGenerationNotMatch | Long | 世代番号(generation)と一致しない場合のみ処理を行う |
setIfMetagenerationMatch | Long | メタ世代番号(metageneration)と一致する場合のみ処理を行う |
setIfMetagenerationNotMatch | Long | メタ世代番号(metageneration)と一致しない場合のみ処理を行う |
setPredefinedAcl | String | バケットに定義するアクセス制御リスト(ACL)の定義 |
setProjection | String | レスポンスとして受け取るプロパティの指定 "full"(全てのプロパティ)、"noAcl"(ACL以外のプロパティ) |
3.2.3. リクエストボディ
StorageObjectのsetメソッドにより、クエリパラメータを追加できます。
1.2.3. リクエストボディと同じです。
3.3. レスポンスの内容
StorageObject
1.3. レスポンスの内容(StorageObject)と同じです。
4. オブジェクトを削除
指定したオブジェクトを削除します。
4.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
StorageScopes.CLOUD_PLATFORM
StorageScopes.DEVSTORAGE_FULL_CONTROL
StorageScopes.DEVSTORAGE_READ_WRITE
⧉[Cloud Storage API(V2)] JavaでCloud Storageを使う(2.2 Storageインスタンスを取得)
でスコープを指定してください。
4.2. 実行
オブジェクト名は、StorageObjectのgetName()で取得できる値を使用します。
public static void main(String[] args) throws Exception{
Storage storage = getStorage();
Storage.Objects objects = storage.objects();
Storage.Objects.Delete delete = objects.delete("バケットID","オブジェクト名");
delete.execute();
}
4.2.1. HTTPリクエスト
DELETE: https://storage.googleapis.com/storage/v1/b/{バケットID}/o/{オブジェクト名}
が実行されます。
4.2.2. クエリパラメータ
Storage.Objects.Deleteのsetメソッドにより、クエリパラメータを追加できます。
メソッド | 引数 | 説明 |
---|---|---|
setGeneration | Long | 世代番号(generation) |
setIfGenerationMatch | Long | 世代番号(generation)と一致する場合のみ処理を行う |
setIfGenerationNotMatch | Long | 世代番号(generation)と一致しない場合のみ処理を行う |
setIfMetagenerationMatch | Long | メタ世代番号(metageneration)と一致する場合のみ処理を行う |
setIfMetagenerationNotMatch | Long | メタ世代番号(metageneration)と一致しない場合のみ処理を行う |
4.2.3. リクエストボディ
リクエストボディはありません。
4.3. レスポンスの内容
レスポンスはありません。
削除に失敗した場合は例外が発生します。
おしまい。。