Cloud Storage for Firebase cho phép bạn tải xuống nhanh chóng và dễ dàng tệp từ Cloud Storage bộ chứa do Firebase cung cấp và quản lý.
Tạo tệp đối chiếu
Để tải một tệp xuống, trước tiên tạo một tệp đối chiếu Cloud Storage vào tệp bạn muốn tải xuống.
Bạn có thể tạo tham chiếu bằng cách thêm đường dẫn con vào thư mục gốc của
Cloud Storage bộ chứa hoặc bạn có thể tạo tệp đối chiếu từ một tệp
URL gs://
hoặc https://
tham chiếu đến một đối tượng trong 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");
Tệp tải xuống
Sau khi có tệp đối chiếu, bạn có thể tải tệp từ Cloud Storage xuống theo 4 cách:
- Tải xuống từ URL
- Tải xuống một mảng byte
- Tải xuống kèm theo luồng
- Tải xuống tệp cục bộ
Phương thức bạn sẽ sử dụng để truy xuất tệp sẽ phụ thuộc vào cách bạn muốn sử dụng dữ liệu trong trò chơi của bạn.
Tải xuống từ URL
Nếu muốn sử dụng URL bằng WWW
hoặc UnityWebRequest
của Unity, bạn có thể
nhận URL tải xuống cho một tệp bằng cách gọi 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. } });
Tải xuống một mảng byte
Bạn có thể tải tệp xuống vùng đệm byte trong bộ nhớ bằng phương thức GetBytesAsync()
.
Phương thức này sẽ tải toàn bộ nội dung của tệp vào bộ nhớ.
Nếu bạn yêu cầu tệp lớn hơn bộ nhớ còn trống của ứng dụng, ứng dụng sẽ gặp sự cố.
Để tránh các vấn đề về bộ nhớ, hãy nhớ đặt kích thước tối đa thành giá trị nào đó
bạn biết ứng dụng của mình có thể xử lý
hoặc sử dụng một phương thức tải xuống khác.
// 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!"); } });
Tải xuống qua một luồng
Việc tải tệp xuống bằng một Luồng cho phép bạn xử lý dữ liệu khi tải xong.
Điều này giúp bạn linh hoạt tối đa khi xử lý tệp tải xuống. Gọi GetStreamAsync()
và truyền trình xử lý luồng của riêng bạn làm đối số đầu tiên.
Người được uỷ quyền này sẽ được gọi trên một luồng trong nền có một Luồng
cho phép bạn thực hiện các thao tác hoặc phép tính chuyên sâu về độ trễ như
lưu trữ nội dung vào ổ đĩa.
// 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()
nhận các đối số không bắt buộc sau trình xử lý luồng
cho phép bạn huỷ hoạt động hoặc nhận thông báo về tiến trình.
Tải xuống tệp cục bộ
Phương thức GetFileAsync()
sẽ tải tệp trực tiếp xuống thiết bị cục bộ. Dùng cách này nếu
người dùng của bạn muốn có quyền truy cập vào tệp khi không có mạng hoặc muốn chia sẻ tệp trong
ứng dụng khác.
// 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."); } });
Bạn có thể đính kèm trình nghe vào tệp đã tải xuống để theo dõi tiến trình của
tải xuống. Trình nghe này tuân theo System.IProgress<T>
tiêu chuẩn
. Bạn có thể sử dụng một thực thể của lớp StorageProgress
để cung cấp Action<T>
của riêng mình làm lệnh gọi lại cho các dấu tiến trình.
// 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."); } });
Xử lý lỗi
Có một số lý do khiến lỗi có thể xảy ra khi tải xuống, bao gồm tệp không tồn tại hoặc người dùng không có quyền truy cập tệp mong muốn. Bạn có thể xem thêm thông tin về các lỗi trong Xử lý lỗi của phần Tài liệu.
Các bước tiếp theo
Bạn cũng có thể tải và cập nhật siêu dữ liệu cho các tệp được lưu trữ trong Cloud Storage.