將檔案上傳至 Cloud Storage 參考資料後,您也可以取得並更新檔案中繼資料,例如更新內容類型。檔案也可以儲存自訂鍵/值組合,以及其他檔案中繼資料。
取得檔案中繼資料
檔案中繼資料包含常見的屬性,例如 name
、size
和 content_type
(通常稱為 MIME 類型),以及較不常見的屬性,例如 content_disposition
和 time_created
。您可以使用 GetMetadata
方法,從 Cloud Storage 參照資料擷取這項中繼資料。
// Create reference to the file whose metadata we want to retrieve StorageReference forest_ref = storage_ref.Child("images/forest.jpg"); // Get metadata properties Futurefuture = forest_ref.GetMetadata(); // Wait for Future to complete... if (future.Error() != firebase::storage::kErrorNone) { // Uh-oh, an error occurred! } else { // We can now retrieve the metadata for 'images/forest.jpg' Metadata* metadata = future.Result(); }
更新檔案中繼資料
檔案上傳完成後,您隨時可以使用 UpdateMetadata
方法更新檔案中繼資料。如要進一步瞭解可更新的屬性,請參閱完整清單。系統只會更新中繼資料中指定的屬性,其他屬性則保持不變。
// Create reference to the file whose metadata we want to change firebase::storage::StorageReference forest_ref = storage_ref.child("images/forest.jpg"); // Create file metadata to update Metadata new_metadata; newMetadata.set_cache_control("public,max-age=300"); newMetadata.set_content_type("image/jpeg"); // Update metadata properties Futurefuture = forest_ref.UpdateMetadata(new_metadata); // Wait for Future to complete... if (future.Error() != firebase::storage::kErrorNone) { // Uh-oh, an error occurred! } else { // We can now retrieve the updated metadata for 'images/forest.jpg' Metadata* metadata = future.Result(); }
您可以傳遞空字串來刪除可寫中繼資料屬性:
// Create file metadata with property to delete StorageMetadata new_metadata; new_metadata.set_content_type(""); // Delete the metadata property Futurefuture = forest_ref.UpdateMetadata(new_metadata); // Wait for Future to complete... if (future.Error() != 0) { // Uh-oh, an error occurred! } else { // metadata.content_type() should be an empty string Metadata* metadata = future.Result(); }
處理錯誤
取得或更新中繼資料時可能會發生錯誤,原因有很多,包括檔案不存在,或使用者沒有存取所需檔案的權限。如要進一步瞭解錯誤,請參閱文件中的「處理錯誤」一節。
自訂中繼資料
您可以將自訂中繼資料指定為包含 std::string
屬性的 std::map
。
std::map<std::string, std::string>* custom_metadata = metadata.custom_metadata(); custom_metadata->insert(std::make_pair("location", "Yosemite, CA, USA"); custom_metadata->insert(std::make_pair("activity", "Hiking");
您可以在自訂中繼資料中儲存每個檔案的應用程式專屬資料,但我們強烈建議您使用資料庫 (例如 Firebase Realtime Database) 來儲存及同步處理這類資料。
檔案中繼資料屬性
以下列出檔案中所有中繼資料屬性:
屬性 | 類型 | 可寫入 |
---|---|---|
bucket |
const char* | 否 |
generation |
const char* | 否 |
metageneration |
const char* | 否 |
full_path |
const char* | 否 |
name |
const char* | 否 |
size |
int64_t | 否 |
time_created |
int64_t | 否 |
updated |
int64_t | 否 |
cache_control |
const char* | 是 |
content_disposition |
const char* | 是 |
content_encoding |
const char* | 是 |
content_language |
const char* | 是 |
content_type |
const char* | 是 |
download_urls |
std::vector<std::string> | 否 |
custom_metadata |
std::map<std::string, std::string> | 是 |
後續步驟
上傳、下載和更新檔案固然重要,但移除檔案也同樣重要。讓我們瞭解如何從 Cloud Storage 刪除檔案。