فایل ها را با Cloud Storage for Unity آپلود کنید

Cloud Storage for Firebase به شما این امکان را می دهد که به سرعت و به راحتی فایل ها را در یک سطل Cloud Storage که توسط Firebase تهیه و مدیریت می شود آپلود کنید.

یک مرجع ایجاد کنید

برای آپلود یک فایل، ابتدا یک مرجع Cloud Storage برای فایلی که می خواهید آپلود کنید ایجاد کنید .

می‌توانید با اضافه کردن مسیرهای فرزند به ریشه سطل فضای ذخیره‌سازی ابری خود، یک مرجع ایجاد کنید، یا می‌توانید از یک نشانی اینترنتی gs:// یا https:// موجود که به یک شی در فضای ذخیره‌سازی ابری ارجاع می‌دهد، یک مرجع ایجاد کنید.

// 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);

نمی‌توانید داده‌ها را با ارجاع به ریشه سطل فضای ذخیره‌سازی ابری خود آپلود کنید. مرجع شما باید به نشانی اینترنتی فرزند اشاره داشته باشد.

آپلود فایل ها

هنگامی که یک مرجع دارید، می توانید فایل ها را به دو روش در فضای ذخیره سازی ابری آپلود کنید:

  1. آپلود از یک آرایه بایت در حافظه
  2. آپلود از مسیر فایلی که نشان دهنده یک فایل در دستگاه است

آپلود از داده ها در حافظه

متد PutBytesAsync() ساده ترین راه برای آپلود فایل در فضای ذخیره سازی ابری است. PutBytesAsync() یک بایت[] می گیرد و یک System.Task<Firebase.Storage.StorageMetadata> را برمی گرداند که حاوی اطلاعات مربوط به فایل پس از اتمام کار خواهد بود. شما می توانید به صورت اختیاری از یک IProgress<UploadState> (معمولا StorageProgress<UploadState> ) برای نظارت بر وضعیت آپلود خود استفاده کنید.

// 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);
        }
    });

از یک فایل محلی آپلود کنید

با روش PutFileAsync() می‌توانید فایل‌های محلی مانند عکس‌ها و فیلم‌های دوربین را روی دستگاه‌ها آپلود کنید. PutFileAsync() string را می گیرد که نشان دهنده مسیر فایل است و یک System.Task<Firebase.Storage.StorageMetadata> را برمی گرداند که حاوی اطلاعات مربوط به فایل پس از اتمام کار خواهد بود. شما می توانید به صورت اختیاری از یک IProgress<UploadState> (معمولا StorageProgress<UploadState> ) برای نظارت بر وضعیت آپلود خود استفاده کنید.

// 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);
        }
    });

اگر می‌خواهید آپلود خود را به طور فعال نظارت کنید، می‌توانید از یک کلاس StorageProgress یا کلاس خود استفاده کنید که IProgress<UploadState> را با متدهای PutFileAsync() یا PutBytesAsync() پیاده‌سازی می‌کند. برای اطلاعات بیشتر به مدیریت آپلودها مراجعه کنید.

افزودن فراداده فایل

همچنین می‌توانید هنگام آپلود فایل‌ها، متادیتا را نیز اضافه کنید. این ابرداده حاوی ویژگی‌های فراداده فایل معمولی مانند Name ، Size ، و ContentType (که معمولاً به آن نوع MIME گفته می‌شود) است. متد PutFileAsync() به طور خودکار نوع محتوا را از پسوند نام فایل استنتاج می کند، اما می توانید نوع شناسایی خودکار را با تعیین ContentType در فراداده لغو کنید. اگر ContentType ارائه نکنید و Cloud Storage نمی تواند پیش فرضی را از پسوند فایل استنتاج کند، Cloud Storage از application/octet-stream استفاده می کند. برای اطلاعات بیشتر در مورد فراداده فایل به بخش Use File Metadata مراجعه کنید.

// 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(...

نظارت بر پیشرفت آپلود

برای نظارت بر پیشرفت آپلود می توانید شنوندگان را به آپلودها پیوست کنید. شنونده از رابط استاندارد System.IProgress<T> پیروی می کند. می توانید از نمونه ای از کلاس StorageProgress استفاده کنید تا Action<T> خود را به عنوان یک تماس برای تیک های پیشرفت ارائه دهید.

// 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.");
    }
});

رسیدگی به خطا

دلایل متعددی وجود دارد که ممکن است هنگام آپلود خطا رخ دهد، از جمله اینکه فایل محلی موجود نیست یا کاربر مجوز آپلود فایل مورد نظر را ندارد. اطلاعات بیشتر درباره خطاها را می توانید در بخش Handle Errors در اسناد بیابید.

مراحل بعدی

اکنون که فایل‌ها را آپلود کردید، بیایید نحوه دانلود آنها را از فضای ذخیره‌سازی ابری بیاموزیم.