Cloud Storage for Firebase, Firebase tarafından sağlanan ve yönetilen bir Cloud Storage paketine hızlı ve kolay bir şekilde dosya yüklemenize olanak tanır.
Referans Oluşturma
Dosya yüklemek için önce yüklemek istediğiniz dosyaya yönelik bir Cloud Storage referansı oluşturun.
Cloud Storage paketinizin köküne alt yollar ekleyerek veya Cloud Storage'da bir nesneye referans veren mevcut bir gs://
ya da https://
URL'sinden referans oluşturabilirsiniz.
// 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);
Cloud Storage paketinizin köküne referans veren verileri yükleyemezsiniz. Referansınız bir alt URL'ye yönlendirmelidir.
Dosya Yükle
Referans aldıktan sonra dosyaları Cloud Storage'a iki şekilde yükleyebilirsiniz:
- Bellekteki bir bayt dizisinden yükle
- Cihazdaki bir dosyayı temsil eden dosya yolundan yükle
Bellekteki verilerden yükle
PutBytesAsync()
yöntemi, Cloud Storage'a dosya yüklemenin en basit yoludur. PutBytesAsync()
bir bayt[] alır ve görev tamamlandığında dosya hakkında bilgi içeren bir System.Task<Firebase.Storage.StorageMetadata>
döndürür. İsteğe bağlı olarak, yükleme durumunuzu izlemek için IProgress<UploadState>
(genellikle StorageProgress<UploadState>
) kullanabilirsiniz.
// 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); } });
Yerel dosyadan yükle
PutFileAsync()
yöntemini kullanarak cihazlara kameradan fotoğraf ve video gibi yerel dosyalar yükleyebilirsiniz. PutFileAsync()
, dosyanın yolunu temsil eden bir string
alır ve görev tamamlandığında dosyayla ilgili bilgileri içeren bir System.Task<Firebase.Storage.StorageMetadata>
döndürür. İsteğe bağlı olarak, yükleme durumunuzu izlemek için IProgress<UploadState>
(genellikle StorageProgress<UploadState>
) kullanabilirsiniz.
// 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); } });
Yüklemenizi etkin bir şekilde izlemek istiyorsanız PutFileAsync()
veya PutBytesAsync()
yöntemleriyle bir StorageProgress
sınıfını veya IProgress<UploadState>
uygulanan kendi sınıfınızı kullanabilirsiniz.
Daha fazla bilgi için Yüklemeleri Yönetme başlıklı makaleye göz atın.
Dosya Meta Verileri Ekleme
Dosya yüklerken meta verileri de ekleyebilirsiniz. Bu meta veriler Name
, Size
ve ContentType
(genellikle MIME türü olarak adlandırılır) gibi tipik dosya meta verisi özelliklerini içerir. PutFileAsync()
yöntemi, içerik türünü dosya adı uzantısından otomatik olarak tahmin eder ancak meta verilerde ContentType
belirterek otomatik algılanan türü geçersiz kılabilirsiniz. ContentType
sağlamazsanız ve Cloud Storage, dosya uzantısından bir varsayılan çıkaramazsa Cloud Storage application/octet-stream
kullanır. Dosya meta verileri hakkında daha fazla bilgi için Dosya Meta Verilerini Kullanma bölümüne bakın.
// 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(...
Yükleme İlerlemesini İzleme
Yüklemenin ilerlemesini izlemek için yüklemelere dinleyiciler ekleyebilirsiniz. Dinleyici, standart System.IProgress<T>
arayüzünü izler. İlerleme değerleri için geri çağırma olarak kendi Action<T>
öğenizi sağlamak üzere StorageProgress
sınıfının bir örneğini kullanabilirsiniz.
// 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."); } });
Hata İşleme
Yükleme sırasında, yerel dosyanın mevcut olmaması veya kullanıcının istenen dosyayı yükleme izninin olmaması gibi çeşitli nedenler vardır. Hatalar hakkında daha fazla bilgiyi belgelerin İşleyici Hataları bölümünde bulabilirsiniz.
Sonraki adımlar
Dosyalarınızı yüklediğinize göre şimdi bunları Cloud Storage'dan nasıl indireceğinizi öğrenelim.