Cloud Storage for Firebase позволяет быстро и легко загружать файлы из корзины Cloud Storage предоставляемой и управляемой Firebase.
Создать ссылку
Чтобы загрузить файл, сначала создайте ссылку на 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
Unity или UnityWebRequest
вы можете получить 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!"); } });
Загрузка через поток
Загрузка файла с помощью потока позволяет вам обрабатывать данные по мере их загрузки. Это дает вам максимальную гибкость при загрузке. Вызовите GetStreamAsync()
и передайте свой собственный потоковый процессор в качестве первого аргумента. Этот делегат будет вызван в фоновом потоке с потоком, который позволяет вам выполнять операции или вычисления с интенсивными задержками, такие как сохранение содержимого на диск.
// 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 .