Firebase için Cloud Storage, dosyaları Firebase tarafından sağlanan ve yönetilen bir Cloud Storage paketine hızlı ve kolay bir şekilde yüklemenize olanak tanır.
Referans Oluştur
Bir dosyayı yüklemek için öncelikle yüklemek istediğiniz dosyaya yönelik bir Cloud Storage referansı oluşturun .
Cloud Storage paketinizin köküne alt yollar ekleyerek bir referans oluşturabilir veya Cloud Storage'daki bir nesneye referans veren mevcut bir gs://
veya https://
URL'sinden bir 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 referansla veri yükleyemezsiniz. Referansınız bir alt URL'ye işaret etmelidir.
Dosyaları yükle
Referansınız olduğunda dosyaları Cloud Storage'a iki şekilde yükleyebilirsiniz:
- Bellekteki bir bayt dizisinden yükleme
- Cihazdaki bir dosyayı temsil eden dosya yolundan yükleme
Bellekteki verilerden yükleme
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çerecek bir System.Task<Firebase.Storage.StorageMetadata>
döndürür. Yükleme durumunuzu izlemek için isteğe bağlı olarak bir 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 bir dosyadan yükleme
PutFileAsync()
yöntemiyle kameradaki fotoğraf ve video gibi yerel dosyaları cihazlara yükleyebilirsiniz. PutFileAsync()
, dosyanın yolunu temsil eden bir string
alır ve görev tamamlandığında dosya hakkında bilgi içerecek bir System.Task<Firebase.Storage.StorageMetadata>
döndürür. Yükleme durumunuzu izlemek için isteğe bağlı olarak bir 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 aktif olarak izlemek istiyorsanız, bir StorageProgress
sınıfını veya IProgress<UploadState>
PutFileAsync()
veya PutBytesAsync()
yöntemleriyle uygulayan kendi sınıfınızı kullanabilirsiniz. Daha fazla bilgi için Yüklemeleri Yönetme konusuna bakın.
Dosya Meta Verilerini Ekle
Dosyaları yüklerken meta verileri de ekleyebilirsiniz. Bu meta veriler Name
, Size
ve ContentType
(genellikle MIME türü olarak anı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 çıkarır, ancak meta verilerde ContentType
belirterek otomatik olarak algılanan türü geçersiz kılabilirsiniz. ContentType
sağlamazsanız ve Cloud Storage dosya uzantısından bir varsayılan çıkarım yapamıyorsa Cloud Storage application/octet-stream
kullanır. Dosya meta verileri hakkında daha fazla bilgi için Dosya Meta Verilerini Kullan 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 İzleyin
Yüklemenin ilerlemesini izlemek için yüklemelere dinleyiciler ekleyebilirsiniz. Dinleyici standart System.IProgress<T>
arayüzünü takip eder. Kendi Action<T>
nizi ilerleme onayları için geri çağırma olarak 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 yönetimi
Yerel dosyanın mevcut olmaması veya kullanıcının istenen dosyayı yükleme iznine sahip olmaması da dahil olmak üzere yükleme sırasında hataların oluşmasının çeşitli nedenleri vardır. Dokümanların Hataları İşleme bölümünde hatalar hakkında daha fazla bilgi bulabilirsiniz.
Sonraki adımlar
Dosyaları yüklediğinize göre artık bunları Cloud Storage'dan nasıl indireceğinizi öğrenelim.