將檔案元資料與 Web 上的 Cloud Storage 結合使用

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

取得文件元數據

檔案元資料包含常見屬性,例如namesizecontentType (通常稱為 MIME 類型),以及一些不太常見的屬性(例如contentDispositiontimeCreated 。可以使用getMetadata()方法從 Cloud Storage 參考中檢索此元資料。 getMetadata()傳回一個包含完整元資料的Promise ,如果Promise拒絕,則傳回錯誤。

Web modular API

import { getStorage, ref, getMetadata } from "firebase/storage";

// Create a reference to the file whose metadata we want to retrieve
const storage = getStorage();
const forestRef = ref(storage, 'images/forest.jpg');

// Get metadata properties
getMetadata(forestRef)
  .then((metadata) => {
    // Metadata now contains the metadata for 'images/forest.jpg'
  })
  .catch((error) => {
    // Uh-oh, an error occurred!
  });

Web namespaced API

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

// Get metadata properties
forestRef.getMetadata()
  .then((metadata) => {
    // Metadata now contains the metadata for 'images/forest.jpg'
  })
  .catch((error) => {
    // Uh-oh, an error occurred!
  });

更新檔案元數據

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

Web modular API

import { getStorage, ref, updateMetadata } from "firebase/storage";

// Create a reference to the file whose metadata we want to change
const storage = getStorage();
const forestRef = ref(storage, 'images/forest.jpg');

// Create file metadata to update
const newMetadata = {
  cacheControl: 'public,max-age=300',
  contentType: 'image/jpeg'
};

// Update metadata properties
updateMetadata(forestRef, newMetadata)
  .then((metadata) => {
    // Updated metadata for 'images/forest.jpg' is returned in the Promise
  }).catch((error) => {
    // Uh-oh, an error occurred!
  });

Web namespaced API

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

// Create file metadata to update
var newMetadata = {
  cacheControl: 'public,max-age=300',
  contentType: 'image/jpeg'
};

// Update metadata properties
forestRef.updateMetadata(newMetadata)
  .then((metadata) => {
    // Updated metadata for 'images/forest.jpg' is returned in the Promise
  }).catch((error) => {
    // Uh-oh, an error occurred!
  });

您可以透過將元資料屬性設為null來刪除它:

Web modular API

import { getStorage, ref, updateMetadata } from "firebase/storage";

const storage = getStorage();
const forestRef = ref(storage, 'images/forest.jpg');

// Create file metadata with property to delete
const deleteMetadata = {
  contentType: null
};

// Delete the metadata property
updateMetadata(forestRef, deleteMetadata)
  .then((metadata) => {
    // metadata.contentType should be null
  }).catch((error) => {
    // Uh-oh, an error occurred!
  });

Web namespaced API

// Create file metadata with property to delete
var deleteMetadata = {
  contentType: null
};

// Delete the metadata property
forestRef.updateMetadata(deleteMetadata)
  .then((metadata) => {
    // metadata.contentType should be null
  }).catch((error) => {
    // Uh-oh, an error occurred!
  });

處理錯誤

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

自訂元數據

您可以將自訂元資料指定為包含String屬性的物件。

Web modular API

const metadata = {
  customMetadata: {
    'location': 'Yosemite, CA, USA',
    'activity': 'Hiking'
  }
};

Web namespaced API

var metadata = {
  customMetadata: {
    'location': 'Yosemite, CA, USA',
    'activity': 'Hiking'
  }
};

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

文件元資料屬性

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

財產類型可寫
bucket細繩
generation細繩
metageneration細繩
fullPath細繩
name細繩
size數位
timeCreated細繩
updated細繩
md5Hash細繩上傳時為“是”,更新元資料為“否”
cacheControl細繩是的
contentDisposition細繩是的
contentEncoding細繩是的
contentLanguage細繩是的
contentType細繩是的
customMetadata包含字串->字串映射的對象是的

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