Unity için Cloud Storage ile dosya yükleme

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 Cloud Storage referansı oluşturun.

Cloud Storage paketinizin köküne alt yollar ekleyerek referans oluşturabilir veya Cloud Storage içindeki 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 içeren verileri yükleyemezsiniz. Referansınız bir alt URL'ye yönlendirmelidir.

Dosya Yükle

Referans oluşturduktan sonra Cloud Storage adresine iki şekilde dosya yükleyebilirsiniz:

  1. Bellekteki bir bayt dizisinden yükleme
  2. Cihazdaki bir dosyayı temsil eden dosya yolundan yükleme

Bellekteki verilerden yükle

PutBytesAsync() yöntemi, Cloud Storage hizmetine dosya yüklemenin en basit yoludur. PutBytesAsync(), byte[] alır ve görev tamamlandığında dosya hakkında bilgi içeren 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öntemini kullanarak cihazlardaki yerel dosyaları (ör. kameradaki fotoğraf ve videolar) yükleyebilirsiniz. PutFileAsync(), dosyanın yolunu temsil eden bir string alır ve görev tamamlandığında dosya hakkında bilgi içeren 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ükleme işleminizi etkin bir şekilde izlemek istiyorsanız PutFileAsync() veya PutBytesAsync() yöntemleriyle StorageProgress sınıfını ya da IProgress<UploadState> uygulayan kendi sınıfınızı kullanabilirsiniz. Daha fazla bilgi için Yüklemeleri yönetme bölümüne bakı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 veri özelliklerini içerir. PutFileAsync() yöntemi, içerik türünü dosya adı uzantısından otomatik olarak çıkarır ancak meta verilerde ContentType değerini belirterek otomatik olarak algılanan türü geçersiz kılabilirsiniz. ContentType sağlamazsanız ve Cloud Storage, dosya uzantısından varsayılan bir değer çı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 durumunu izleme

Yükleme işleminin ilerleme durumunu izlemek için yüklemelere dinleyici ekleyebilirsiniz. Dinleyici, standart System.IProgress<T> arayüzünü kullanır. İlerleme adımları 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 hata oluşmasının çeşitli nedenleri vardır. Örneğin, yerel dosyanın mevcut olmaması veya kullanıcının istenen dosyayı yükleme izninin olmaması. Hatalar hakkında daha fazla bilgiyi belgelerin Hataları İşleme bölümünde bulabilirsiniz.

Sonraki adımlar

Dosyaları yüklediğinize göre, şimdi de Cloud Storage üzerinden dosya indirmeyi öğrenelim.