Android でファイル メタデータを使用する

ファイルを Firebase Storage 参照にアップロードした後で、ファイル メタデータを取得、更新して、コンテンツ タイプの表示や更新などを行うことができます。ファイルには、追加のファイル メタデータを使用してカスタム Key-Value ペアを格納することもできます。

ファイル メタデータを取得する

ファイル メタデータには、namesizecontentType(多くの場合 MIME タイプと呼ばれます)などの一般的なプロパティに加え、contentDispositiontimeCreated などのあまり一般的でないプロパティも含まれます。このメタデータは、getMetadata() メソッドを使用して Firebase Storage 参照から取得できます。

 verbatim 061ea853d37b5988e2db2981f858b16b // Create a storage reference from our app
StorageReference storageRef = storage.getReferenceFromUrl("gs://<your-bucket-name>");

// Get reference to the file
StorageReference forestRef = storageRef.child("images/forest.jpg"); endverbatim 061ea853d37b5988e2db2981f858b16b 

 verbatim fd38174a422636547d03b9dd042c7051 forestRef.getMetadata().addOnSuccessListener(new OnSuccessListener<StorageMetadata>() {
    @Override
    public void onSuccess(StorageMetadata storageMetadata) {
        // Metadata now contains the metadata for 'images/forest.jpg'
    }
}).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception exception) {
        // Uh-oh, an error occurred!
    }
}); endverbatim fd38174a422636547d03b9dd042c7051 

ファイル メタデータを更新する

ファイルのアップロードが完了したら、updateMetadata() メソッドを使用して、いつでもファイル メタデータを更新できます。更新できるプロパティについて詳しくは、全一覧をご覧ください。メタデータに指定されているプロパティのみ更新され、それ以外のプロパティはすべて変更されずに残ります。

 verbatim 061ea853d37b5988e2db2981f858b16b // Create a storage reference from our app
StorageReference storageRef = storage.getReferenceFromUrl("gs://<your-bucket-name>");

// Get reference to the file
StorageReference forestRef = storageRef.child("images/forest.jpg"); endverbatim 061ea853d37b5988e2db2981f858b16b 

 verbatim d1d4f3a732eb8e7e57549ca9ae3da30b // Create file metadata including the content type
StorageMetadata metadata = new StorageMetadata.Builder()
        .setContentType("image/jpg")
        .setCustomMetadata("myCustomProperty", "myValue")
        .build();

// Update metadata properties
forestRef.updateMetadata(metadata)
        .addOnSuccessListener(new OnSuccessListener<StorageMetadata>() {
            @Override
            public void onSuccess(StorageMetadata storageMetadata) {
                // Updated metadata is in storageMetadata
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception exception) {
                // Uh-oh, an error occurred!
            }
        }); endverbatim d1d4f3a732eb8e7e57549ca9ae3da30b 

書き込み可能なメタデータ プロパティを削除するには、次のように null を渡すことができます。

 verbatim 40c32a2d4bc9a912c80052da81ad45db // Create file metadata with property to delete
StorageMetadata metadata = new StorageMetadata.Builder()
.setContentType(null)
.build();

// Delete the metadata property
forestRef.updateMetadata(metadata)
.addOnSuccessListener(new OnSuccessListener<StorageMetadata>() {
    @Override
    public void onSuccess(StorageMetadata storageMetadata) {
        // metadata.contentType should be null
    }
})
.addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception exception) {
        // Uh-oh, an error occurred!
    }
}); endverbatim 40c32a2d4bc9a912c80052da81ad45db 

エラーを処理する

メタデータの取得または更新時にエラーが発生する理由として、ファイルが存在しない、目的のファイルのアクセス権がユーザーにないなど、たくさんの理由が考えられます。エラーについて詳しくは、このドキュメントのエラーの処理のセクションをご覧ください。

カスタム メタデータ

カスタム メタデータは Map<String, String> として指定することができます。

 verbatim e64327e0b55b9c7d617fe3eca9d1b7cb metadata = new StorageMetadata.Builder()
        .setCustomMetadata("location", "Yosemite, CA, USA")
        .setCustomMetadata("activity", "Hiking")
        .build(); endverbatim e64327e0b55b9c7d617fe3eca9d1b7cb 

各ファイルのアプリ固有のデータをカスタム メタデータに格納することができますが、このタイプのデータを格納して同期するには、データベース(Firebase Realtime Database など)を使用することを強くおすすめします。

ファイル メタデータのプロパティ

ファイルに関するメタデータ プロパティの全一覧は次のとおりです。

プロパティ ゲッター セッターの有無
getBucket String なし
getGenerator String なし
getMetadataGeneration String なし
getPath String なし
getName String なし
getSizeBytes long なし
getCreationTimeMillis long なし
getUpdatedTimeMillis long なし
getMd5Hash String なし
getCacheControl String あり
getContentDisposition String あり
getContentEncoding String あり
getContentLanguage String あり
getContentType String あり
getDownloadUrl Uri なし
getDownloadUrls List<Uri> なし
getCustomMetadata Map<String, String> あり

ファイルのアップロード、ダウンロード、更新は重要ですが、ファイルを削除できることも重要です。次は、Firebase Storage からファイルを削除する方法を学習しましょう。

フィードバックを送信...