將檔案上傳到 Cloud Storage 參考後,您還可以獲得和更新檔案元數據,例如查看或更新內容類型。文件還可以儲存自訂鍵/值對以及其他文件元資料。
取得文件元數據
檔案元資料包含常見屬性,例如name
、 size
和contentType
(通常稱為 MIME 類型),以及一些不太常見的屬性(例如contentDisposition
和timeCreated
。可以使用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> | 是的 |
上傳、下載和更新檔案很重要,但刪除它們的能力也很重要。讓我們了解如何從雲端儲存中刪除檔案。