Как использовать метаданные файлов в веб-версии Cloud Storage

После загрузки файла в цифровой отпечаток Cloud Storage вы также можете получить или обновить метаданные файла, например чтобы обновить тип контента. В файлах также можно хранить пользовательские пары "ключ-значение" с дополнительными метаданными.

Получить метаданные файла

Метаданные файла содержат общие свойства, такие как name, size и contentType (часто называемые MIME-типом), а также некоторые менее распространенные, например contentDisposition и timeCreated. Эти метаданные можно получить из ссылки Cloud Storage с помощью метода getMetadata(). getMetadata() возвращает Promise, содержащий полные метаданные, или ошибку, если Promise отклоняет запрос.

Web

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

// 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

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

// 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

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

// 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

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

Web

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

Вы можете использовать специальные метаданные для хранения дополнительных данных, относящихся к приложению, для каждого файла, но мы настоятельно рекомендуем использовать базу данных (например, Firebase Realtime Database) для хранения и синхронизации данных этого типа.

Свойства метаданных файла

Ниже приведен полный список свойств метаданных файла.

Ресурс Тип Можно редактировать
bucket string НЕТ
generation string НЕТ
metageneration string НЕТ
fullPath string НЕТ
name string НЕТ
size Число НЕТ
timeCreated string НЕТ
updated string НЕТ
md5Hash string Да – при загрузке, нет – при обновлении метаданных.
cacheControl string ДА
contentDisposition string ДА
contentEncoding string ДА
contentLanguage string ДА
contentType string ДА
customMetadata Объект, содержащий сопоставления string->string ДА

Загрузка, скачивание и обновление файлов важны, но также важна возможность их удаления. Давайте узнаем, как удалять файлы из Cloud Storage.