Unity için Cloud Storage ile dosya yükleme

Cloud Storage for Firebase, dosyalarınızı bir klasöre hızlı ve kolay bir şekilde yüklemenizi sağlar Cloud Storage paketi sağlandı Firebase tarafından yönetilir.

Referans Oluşturma

Dosya yüklemek için öncelikle yüklemek istediğiniz dosyaya Cloud Storage referansı oluşturun.

Cloud Storage paketine sahip olabilir veya mevcut bir paketten referans oluşturabilirsiniz Cloud Storage içindeki bir nesneye referans veren gs:// veya https:// URL'si.

// 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 veriler yükleyemezsiniz. Referansınız bir alt URL'ye işaret etmelidir.

Dosya Yükle

Referans aldıktan sonra Cloud Storage platformuna dosya yükleyebilirsiniz iki yöntem vardır:

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

Bellekteki verilerden yükleme

PutBytesAsync() yöntemi, Cloud Storage'a dosya yüklemenin en basit yoludur. PutBytesAsync(), bir byte[] alır ve görev tamamlandığında dosyayla ilgili bilgileri içeren bir System.Task<Firebase.Storage.StorageMetadata> döndürür. İsterseniz IProgress<UploadState> (tipik olarak StorageProgress<UploadState>) kullanın: Yükleme durumunuzu izleyin.

// 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 yerel dosyalar (ör. kameradan alınan fotoğraflar ve videolar) yükleyebilirsiniz. PutFileAsync() string atıyor dosyanın yolunu temsil eder ve bir System.Task<Firebase.Storage.StorageMetadata> ve şunu içerir: dosya hakkında bilgi edinmeye çalışır. İsterseniz yükleme durumunuzu izlemek için 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 etkin bir şekilde izlemek istiyorsanız PutFileAsync() veya PutBytesAsync() yöntemleriyle StorageProgress sınıfını ya da IProgress<UploadState>'u uygulayan kendi sınıfınızı kullanabilirsiniz. Daha fazla bilgi için Yüklemeleri yönetme başlıklı makaleyi inceleyin.

Dosya Meta Verileri Ekleme

Dosya yüklerken meta veri de ekleyebilirsiniz. Bu meta veri şunları içerir: Name, Size ve ContentType gibi tipik dosya meta verisi özellikleri (genellikle MIME türü olarak ifade edilir). PutFileAsync() yöntemi otomatik olarak içerik türünü dosya adı uzantısından çıkarır, ancak meta veride ContentType belirtilerek otomatik algılanan tür. Bir ContentType sağlamazsanız ve Cloud Storage dosya uzantısından varsayılan bir değer çıkaramazsa Cloud Storage, application/octet-stream değerini 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 ilerleme 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 çubukları için geri çağırma işlevi olarak kendi Action<T>'ınızı 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 hataların oluşmasının birden çok nedeni vardır. Örneğin, yerel dosyanın mevcut olmaması veya kullanıcının istenen dosyayı yükleme iznine sahip olmaması. Hatalarla ilgili daha fazla bilgiyi dokümanların Hataları İşleme bölümünde bulabilirsiniz.

Sonraki adımlar

Dosyaları yüklediğinize göre Cloud Storage'den nasıl indireceğinizi öğrenelim.