Cloud Storage for Firebase cho phép bạn nhanh chóng và dễ dàng tải tệp lên Đã cung cấp bộ chứa Cloud Storage và được Firebase quản lý.
Tạo tệp đối chiếu
Để tải một tệp lên, 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 lên.
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 root reference StorageReference storageRef = storage.RootReference; // Create a reference to "mountains.jpg" StorageReference mountainsRef = storageRef.Child("mountains.jpg"); // Create a reference to 'images/mountains.jpg' StorageReference mountainImagesRef = storageRef.Child("images/mountains.jpg"); // While the file names are the same, the references point to different files Assert.AreEqual(mountainsRef.Name, mountainImagesRef.Name); Assert.AreNotEqual(mountainsRef.Path, mountainImagesRef.Path);
Bạn không thể tải lên dữ liệu có tham chiếu đến thư mục gốc của Cloud Storage bộ chứa. URL tham chiếu của bạn phải trỏ đến một URL con.
Tải tệp lên
Sau khi có tệp đối chiếu, bạn có thể tải tệp lên Cloud Storage theo 2 cách:
- Tải lên từ một mảng byte trong bộ nhớ
- Tải lên từ một đường dẫn tệp đại diện cho một tệp trên thiết bị
Tải lên từ dữ liệu trong bộ nhớ
Phương thức PutBytesAsync()
là cách đơn giản nhất để tải tệp lên
Cloud Storage. PutBytesAsync()
cần một byte[]
và trả về một System.Task<Firebase.Storage.StorageMetadata>
.
chứa thông tin về tệp khi tác vụ hoàn tất. Bạn có thể tuỳ ý
hãy sử dụng IProgress<UploadState>
(thường là StorageProgress<UploadState>
) để
theo dõi trạng thái tải lên.
// Data in memory var customBytes = new byte[] { /*...*/ }; // Create a reference to the file you want to upload StorageReference riversRef = storageRef.Child("images/rivers.jpg"); // Upload the file to the path "images/rivers.jpg" riversRef.PutBytesAsync(customBytes) .ContinueWith((Task<StorageMetadata> task) => { if (task.IsFaulted || task.IsCanceled) { Debug.Log(task.Exception.ToString()); // Uh-oh, an error occurred! } else { // Metadata contains file metadata such as size, content-type, and md5hash. StorageMetadata metadata = task.Result; string md5Hash = metadata.Md5Hash; Debug.Log("Finished uploading..."); Debug.Log("md5 hash = " + md5Hash); } });
Tải lên từ một tệp trên máy
Bạn có thể tải lên các tệp cục bộ trên thiết bị, chẳng hạn như ảnh và video từ
camera bằng phương thức PutFileAsync()
. PutFileAsync()
mất string
biểu thị đường dẫn đến tệp và trả về một
System.Task<Firebase.Storage.StorageMetadata>
sẽ chứa
về tệp khi tác vụ hoàn tất. Bạn có thể tuỳ ý
hãy sử dụng IProgress<UploadState>
(thường là StorageProgress<UploadState>
) để
theo dõi trạng thái tải lên.
// File located on disk string localFile = "..."; // Create a reference to the file you want to upload StorageReference riversRef = storageRef.Child("images/rivers.jpg"); // Upload the file to the path "images/rivers.jpg" riversRef.PutFileAsync(localFile) .ContinueWith((Task<StorageMetadata> task) => { if (task.IsFaulted || task.IsCanceled) { Debug.Log(task.Exception.ToString()); // Uh-oh, an error occurred! } else { // Metadata contains file metadata such as size, content-type, and download URL. StorageMetadata metadata = task.Result; string md5Hash = metadata.Md5Hash; Debug.Log("Finished uploading..."); Debug.Log("md5 hash = " + md5Hash); } });
Nếu muốn chủ động giám sát quá trình tải lên của mình, bạn có thể sử dụng StorageProgress
lớp hoặc lớp của riêng bạn mà triển khai IProgress<UploadState>
, với
Phương thức PutFileAsync()
hoặc PutBytesAsync()
.
Hãy xem bài viết Quản lý tệp tải lên để biết thêm thông tin.
Thêm siêu dữ liệu tệp
Bạn cũng có thể thêm siêu dữ liệu khi tải tệp lên. Siêu dữ liệu này chứa các thuộc tính siêu dữ liệu tệp thông thường như Name
, Size
và ContentType
(thường được gọi là loại MIME). Phương thức PutFileAsync()
tự động suy luận loại nội dung từ đuôi tệp, nhưng bạn có thể ghi đè loại được phát hiện tự động bằng cách chỉ định ContentType
trong siêu dữ liệu. Nếu bạn không
cung cấp ContentType
và Cloud Storage không thể suy ra giá trị mặc định từ
đuôi tệp Cloud Storage sử dụng application/octet-stream
. Xem
Sử dụng siêu dữ liệu tệp
để biết thêm thông tin về siêu dữ liệu tệp.
// Create storage reference StorageReference mountainsRef = storageRef.Child("images/mountains.jpg"); byte[] customBytes = new byte[] { /*...*/ }; string localFile = "..."; // Create file metadata including the content type var newMetadata = new MetadataChange(); newMetadata.ContentType = "image/jpeg"; // Upload data and metadata mountainsRef.PutBytesAsync(customBytes, newMetadata, null, CancellationToken.None); // .ContinueWithOnMainThread(... // Upload file and metadata mountainsRef.PutFileAsync(localFile, newMetadata, null, CancellationToken.None); // .ContinueWithOnMainThread(...
Theo dõi tiến trình tải lên
Bạn có thể đính kèm trình nghe vào nội dung tải lên để theo dõi tiến trình của
tải lên. Trình nghe này tuân theo System.IProgress<T>
tiêu chuẩn
. Bạn có thể dùng một thực thể của lớp StorageProgress
để cung cấp
Action<T>
của riêng bạn làm lệnh gọi lại để đánh dấu tiến trình.
// Start uploading a file var task = storageRef.Child("images/mountains.jpg") .PutFileAsync(localFile, null, new StorageProgress<UploadState>(state => { // called periodically during the upload Debug.Log(String.Format("Progress: {0} of {1} bytes transferred.", state.BytesTransferred, state.TotalByteCount)); }), CancellationToken.None, null); task.ContinueWithOnMainThread(resultTask => { if (!resultTask.IsFaulted && !resultTask.IsCanceled) { Debug.Log("Upload finished."); } });
Lỗi xử lý
Có một số lý do khiến lỗi có thể xảy ra khi tải lên, bao gồm tệp cục bộ không tồn tại hoặc người dùng không có quyền tải lên tệp mong muốn. Bạn có thể tìm thêm thông tin về các lỗi trong phần Xử lý lỗi của phần Tài liệu.
Các bước tiếp theo
Giờ bạn đã tải tệp lên, hãy tìm hiểu cách tải chúng xuống từ Cloud Storage.