Cloud Storage for Firebase позволяет быстро и легко скачивать файлы из предоставленного и управляемого Firebase сегмента Cloud Storage.
Создание ссылки
Чтобы скачать файл, сначала создайте ссылку Cloud Storage на нужный файл.
Вы можете создать ссылку, добавив дочерние пути к корневому каталогу корзины Cloud Storage, или создать ссылку из существующего URL gs:// или https://, указывающего на объект в Cloud Storage.
// Create a reference with an initial file path and name StorageReference pathReference = storage.GetReference("images/stars.jpg"); // Create a reference from a Google Cloud Storage URI StorageReference gsReference = storage.GetReferenceFromUrl("gs://bucket/images/stars.jpg"); // Create a reference from an HTTPS URL // Note that in the URL, characters are URL escaped! StorageReference httpsReference = storage.GetReferenceFromUrl("https://firebasestorage.googleapis.com/b/bucket/o/images%20stars.jpg");
Скачивание файлов
После того как вы создадите цифровой отпечаток, вы сможете скачать файлы из Cloud Storage четырьмя способами:
- Как скачать файл по URL
- Как скачать в массив байтов
- Как скачать видео с помощью стрима
- Как скачать в локальный файл
Способ получения файлов зависит от того, как вы хотите использовать данные в игре.
Как скачать файл по URL
Если вы хотите использовать URL с WWW или UnityWebRequest Unity, то можете получить URL для скачивания файла, вызвав GetDownloadUrlAsync().
// Fetch the download URL reference.GetDownloadUrlAsync().ContinueWithOnMainThread(task => { if (!task.IsFaulted && !task.IsCanceled) { Debug.Log("Download URL: " + task.Result); // ... now download the file via WWW or UnityWebRequest. } });
Как скачать в массив байтов
Вы можете скачать файл в буфер байтов в памяти с помощью метода GetBytesAsync().
При этом весь файл будет загружен в память.
Если вы запросите файл большего размера, чем доступно памяти в приложении, оно аварийно завершит работу.
Чтобы избежать проблем с памятью, задайте максимальный размер, который ваше приложение может обработать, или используйте другой метод скачивания.
// Download in memory with a maximum allowed size of 1MB (1 * 1024 * 1024 bytes) const long maxAllowedSize = 1 * 1024 * 1024; reference.GetBytesAsync(maxAllowedSize).ContinueWithOnMainThread(task => { if (task.IsFaulted || task.IsCanceled) { Debug.LogException(task.Exception); // Uh-oh, an error occurred! } else { byte[] fileContents = task.Result; Debug.Log("Finished downloading!"); } });
Как скачать видео с помощью стрима
Скачивание файла с помощью потока позволяет обрабатывать данные по мере их загрузки.
Это дает вам максимальную гибкость при работе с файлом. Вызовите функцию Call
GetStreamAsync() и передайте свой процессор потока в качестве первого аргумента.
Этот делегат будет вызываться в фоновом потоке с объектом Stream, который позволяет выполнять операции или вычисления, требующие значительной задержки, например сохранять контент на диск.
// Download via a Stream reference.GetStreamAsync(stream => { // Do something with the stream here. // // This code runs on a background thread which reduces the impact // to your framerate. // // If you want to do something on the main thread, you can do that in the // progress eventhandler (second argument) or ContinueWith to execute it // at task completion. }, null, CancellationToken.None);
GetStreamAsync() принимает необязательные аргументы после процессора потока, которые позволяют отменить операцию или получать уведомления о ее ходе.
Как скачать в локальный файл
При использовании метода GetFileAsync() файл скачивается непосредственно на локальное устройство. Используйте этот вариант, если пользователям нужен доступ к файлу в офлайн-режиме или они хотят поделиться файлом в другом приложении.
// Create local filesystem URL string localUrl = "file:///local/images/island.jpg"; // Download to the local filesystem reference.GetFileAsync(localUrl).ContinueWithOnMainThread(task => { if (!task.IsFaulted && !task.IsCanceled) { Debug.Log("File downloaded."); } });
Вы можете прикрепить к скачиваниям прослушиватели, чтобы отслеживать их прогресс. Прослушиватель соответствует стандартному интерфейсу System.IProgress<T>. Вы можете использовать экземпляр класса StorageProgress, чтобы предоставить свой собственный Action<T> в качестве обратного вызова для тиков прогресса.
// Create local filesystem URL string localUrl = "file:///local/images/island.jpg"; // Start downloading a file Task task = reference.GetFileAsync(localFile, new StorageProgress<DownloadState>(state => { // called periodically during the download Debug.Log(String.Format( "Progress: {0} of {1} bytes transferred.", state.BytesTransferred, state.TotalByteCount )); }), CancellationToken.None); task.ContinueWithOnMainThread(resultTask => { if (!resultTask.IsFaulted && !resultTask.IsCanceled) { Debug.Log("Download finished."); } });
Обработка ошибок
Причины ошибок при скачивании могут быть разными, например файл не существует или у пользователя нет разрешения на доступ к нему. Дополнительную информацию об ошибках можно найти в разделе Обработка ошибок документации.
Дальнейшие действия
Вы также можете получать и обновлять метаданные файлов, хранящихся в Cloud Storage.