ファイルを Cloud Storage 参照にアップロードした後で、ファイル メタデータを取得、更新して、コンテンツ タイプの更新などを行うことができます。ファイルには、追加のファイル メタデータを使用してカスタム Key-Value ペアを格納することもできます。
ファイル メタデータを取得する
ファイル メタデータには、name
、size
、contentType
(多くの場合 MIME タイプと呼ばれます)などの一般的なプロパティに加え、contentDisposition
や timeCreated
などのあまり一般的でないプロパティも含まれます。このメタデータは、metadataWithCompletion:
メソッドを使用して Cloud Storage 参照から取得できます。
Swift
// Create reference to the file whose metadata we want to retrieve let forestRef = storageRef.child("images/forest.jpg") // Get metadata properties do { let metadata = try await forestRef.getMetadata() } catch { // ... }
Objective-C
// Create reference to the file whose metadata we want to retrieve FIRStorageReference *forestRef = [storageRef child:@"images/forest.jpg"]; // Get metadata properties [forestRef metadataWithCompletion:^(FIRStorageMetadata *metadata, NSError *error) { if (error != nil) { // Uh-oh, an error occurred! } else { // Metadata now contains the metadata for 'images/forest.jpg' } }];
ファイル メタデータを更新する
ファイルのアップロードが完了したら、updateMetadata:withCompletion:
メソッドを使用して、いつでもファイル メタデータを更新できます。更新できるプロパティについて詳しくは、全一覧をご覧ください。メタデータに指定されているプロパティのみ更新され、それ以外のプロパティはすべて変更されずに残ります。
Swift
// Create reference to the file whose metadata we want to change let forestRef = storageRef.child("images/forest.jpg") // Create file metadata to update let newMetadata = StorageMetadata() newMetadata.cacheControl = "public,max-age=300" newMetadata.contentType = "image/jpeg" // Update metadata properties do { let updatedMetadata = try await forestRef.updateMetadata(newMetadata) } catch { // ... }
Objective-C
// Create reference to the file whose metadata we want to change FIRStorageReference *forestRef = [storageRef child:@"images/forest.jpg"]; // Create file metadata to update FIRStorageMetadata *newMetadata = [[FIRStorageMetadata alloc] init]; newMetadata.cacheControl = @"public,max-age=300"; newMetadata.contentType = @"image/jpeg"; // Update metadata properties [forestRef updateMetadata:newMetadata completion:^(FIRStorageMetadata *metadata, NSError *error){ if (error != nil) { // Uh-oh, an error occurred! } else { // Updated metadata for 'images/forest.jpg' is returned } }];
書き込み可能なメタデータ プロパティを削除するには、nil
を次のように設定します。
Objective-C
FIRStorageMetadata *newMetadata = [[FIRStorageMetadata alloc] init]; newMetadata.contentType = nil; // Delete the metadata property [forestRef updateMetadata:newMetadata completion:^(FIRStorageMetadata *metadata, NSError *error){ if (error != nil) { // Uh-oh, an error occurred! } else { // metadata.contentType should be nil } }];
Swift
let newMetadata = StorageMetadata() newMetadata.contentType = nil do { // Delete the metadata property let updatedMetadata = try await forestRef.updateMetadata(newMetadata) } catch { // ... }
エラーを処理する
メタデータの取得または更新時にエラーが発生する理由として、ファイルが存在しない、目的のファイルのアクセス権がユーザーにないなど、多くの理由が考えられます。エラーについて詳しくは、このドキュメントのエラーの処理のセクションをご覧ください。
カスタム メタデータ
カスタム メタデータは、NSString
プロパティを含む NSDictionary
として指定できます。
Swift
let metadata = [ "customMetadata": [ "location": "Yosemite, CA, USA", "activity": "Hiking" ] ]
Objective-C
NSDictionary *metadata = @{ @"customMetadata": @{ @"location": @"Yosemite, CA, USA", @"activity": @"Hiking" } };
各ファイルについてアプリ固有のデータをカスタム メタデータに格納することは可能ですが、このタイプのデータを格納して同期するには、データベース(Firebase Realtime Database など)を使用することを強くおすすめします。
ファイル メタデータのプロパティ
ファイルに関するメタデータ プロパティの一覧は次のとおりです。
プロパティ | タイプ | 書き込み可能 |
---|---|---|
bucket |
文字列 | × |
generation |
文字列 | × |
metageneration |
文字列 | × |
fullPath |
文字列 | × |
name |
文字列 | × |
size |
Int64 | × |
timeCreated |
日付 | × |
updated |
日付 | × |
md5Hash |
文字列 | ○ |
cacheControl |
文字列 | ○ |
contentDisposition |
文字列 | ○ |
contentEncoding |
文字列 | ○ |
contentLanguage |
文字列 | ○ |
contentType |
文字列 | ○ |
customMetadata |
[文字列: 文字列] | ○ |
ファイルのアップロード、ダウンロード、更新は重要ですが、ファイルを削除できることも重要です。Cloud Storage からファイルを削除する方法を学習しましょう。