Unity için Cloud Storage ile dosya yükleyin

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:

  1. Bellekteki bir bayt dizisinden yükleme
  2. 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.