在 Flutter 上透過 Cloud Storage 使用檔案元數據

將檔案上傳到 Cloud Storage 參考後,您還可以獲得和更新檔案元數據,例如查看或更新內容類型。文件還可以儲存自訂鍵/值對以及其他文件元資料。

取得文件元數據

檔案元資料包含常見屬性,例如namesizecontentType (通常稱為 MIME 類型),以及一些不太常見的屬性(例如contentDispositiontimeCreated 。可以使用getMetadata()方法從 Cloud Storage 參考中檢索此元資料。

// Create reference to the file whose metadata we want to retrieve
final forestRef = storageRef.child("images/forest.jpg");

// Get metadata properties
final metadata = await forestRef.getMetadata();

// Metadata now contains the metadata for 'images/forest.jpg'

更新檔案元數據

文件上傳完成後,您可以隨時使用updateMetadata()方法更新文件元資料。有關可以更新哪些屬性的更多信息,請參閱完整列表。僅更新元資料中指定的屬性,所有其他屬性均保持不變。

// Create reference to the file whose metadata we want to change
final forestRef = storageRef.child("images/forest.jpg");

// Create file metadata to update
final newMetadata = SettableMetadata(
  cacheControl: "public,max-age=300",
  contentType: "image/jpeg",
);

// Update metadata properties
final metadata = await forestRef.updateMetadata(newMetadata);

// Updated metadata for 'images/forest.jpg' is returned

您可以透過傳遞null來刪除可寫入元資料屬性:

// Delete the cacheControl property
final newMetadata = SettableMetadata(cacheControl: null);
final metadata = await forestRef.updateMetadata(newMetadata);

處理錯誤

取得或更新元資料時可能發生錯誤的原因有很多,包括檔案不存在或使用者沒有存取所需檔案的權限。有關錯誤的更多資訊可以在文件的處理錯誤部分找到。

自訂元數據

您可以使用SettableMetadata建構函式的customMetadata參數指定自訂元資料:

// Create reference to the file whose metadata we want to change
final forestRef = storageRef.child("images/forest.jpg");

// Create file metadata to update
final newCustomMetadata = SettableMetadata(
  customMetadata: {
    "location": "Yosemite, CA, USA",
    "activity": "Hiking",
  },
);

// Update metadata properties
final metadata = await forestRef.updateMetadata(newCustomMetadata);

// Updated metadata for 'images/forest.jpg' is returned

您可以在自訂元資料中儲存每個檔案的應用特定數據,但我們強烈建議使用資料庫(例如Firebase 即時資料庫)來儲存和同步此類資料。

文件元資料屬性

下面提供了文件元資料屬性的完整清單:

財產類型可設定嗎?
bucket String
generation String
metageneration String
metadataGeneration String
fullPath String
name String
size int
timeCreated DateTime
updated DateTime
md5Hash String
cacheControl String是的
contentDisposition String是的
contentEncoding String是的
contentLanguage String是的
contentType String是的
customMetadata Map<String, String>是的

上傳、下載和更新檔案很重要,但刪除它們的能力也很重要。讓我們了解如何從雲端儲存中刪除檔案