將檔案上傳至 Cloud Storage 參考資料後,您也可以取得並更新檔案中繼資料,例如更新內容類型。檔案也可以儲存自訂鍵/值組合與其他檔案中繼資料。
取得檔案中繼資料
檔案中繼資料包含常見的屬性,例如 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 刪除檔案。