Cloud Storage dla Firebase umożliwia szybkie i łatwe przesyłanie plików do zasobnika Cloud Storage udostępnianego i zarządzanego przez Firebase.
Utwórz odniesienie
Aby przesłać plik, najpierw utwórz odniesienie do Cloud Storage dla pliku, który chcesz przesłać.
Możesz utworzyć odniesienie, dołączając ścieżki podrzędne do katalogu głównego zasobnika Cloud Storage lub możesz utworzyć odniesienie z istniejącego adresu URL gs://
lub https://
odnoszącego się do obiektu w 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);
Nie możesz przesyłać danych z odniesieniem do katalogu głównego zasobnika Cloud Storage. Twoje odwołanie musi wskazywać na podrzędny adres URL.
Prześlij pliki
Po uzyskaniu referencji możesz przesyłać pliki do Cloud Storage na dwa sposoby:
- Prześlij z tablicy bajtów w pamięci
- Prześlij ze ścieżki pliku reprezentującej plik na urządzeniu
Prześlij z danych znajdujących się w pamięci
Metoda PutBytesAsync()
to najprostszy sposób przesłania pliku do Cloud Storage. PutBytesAsync()
pobiera bajt[] i zwraca System.Task<Firebase.Storage.StorageMetadata>
, który będzie zawierał informacje o pliku po zakończeniu zadania. Opcjonalnie możesz użyć IProgress<UploadState>
(zwykle StorageProgress<UploadState>
) do monitorowania stanu przesyłania.
// 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); } });
Prześlij z pliku lokalnego
Za pomocą metody PutFileAsync()
możesz przesyłać pliki lokalne na urządzenia, takie jak zdjęcia i filmy z aparatu. PutFileAsync()
pobiera string
reprezentujący ścieżkę do pliku i zwraca System.Task<Firebase.Storage.StorageMetadata>
, który będzie zawierał informacje o pliku po zakończeniu zadania. Opcjonalnie możesz użyć IProgress<UploadState>
(zwykle StorageProgress<UploadState>
) do monitorowania stanu przesyłania.
// 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); } });
Jeśli chcesz aktywnie monitorować przesyłanie, możesz użyć klasy StorageProgress
lub własnej klasy, która implementuje IProgress<UploadState>
za pomocą metod PutFileAsync()
lub PutBytesAsync()
. Aby uzyskać więcej informacji, zobacz Zarządzanie przesyłaniem .
Dodaj metadane pliku
Przesyłając pliki, możesz także dołączyć metadane. Te metadane zawierają typowe właściwości metadanych pliku, takie jak Name
, Size
i ContentType
(powszechnie określane jako typ MIME). Metoda PutFileAsync()
automatycznie wnioskuje typ zawartości na podstawie rozszerzenia nazwy pliku, ale można zastąpić typ wykryty automatycznie, określając ContentType
w metadanych. Jeśli nie podasz ContentType
i Cloud Storage nie będzie mógł wywnioskować wartości domyślnej z rozszerzenia pliku, Cloud Storage użyje application/octet-stream
. Aby uzyskać więcej informacji na temat metadanych plików, zobacz sekcję Użyj metadanych pliku.
// 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(...
Monitoruj postęp przesyłania
Możesz dołączyć słuchaczy do przesyłanych plików, aby monitorować postęp przesyłania. Odbiornik korzysta ze standardowego interfejsu System.IProgress<T>
. Możesz użyć instancji klasy StorageProgress
, aby udostępnić własną Action<T>
jako wywołanie zwrotne dla znaczników postępu.
// 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."); } });
Obsługa błędów
Istnieje wiele powodów, dla których mogą wystąpić błędy podczas przesyłania, na przykład nieistniejący plik lokalny lub brak uprawnień użytkownika do przesłania żądanego pliku. Więcej informacji na temat błędów można znaleźć w sekcji Obsługiwanie błędów w dokumentacji.
Następne kroki
Po przesłaniu plików nauczmy się, jak je pobrać z Cloud Storage.