Cloud Storage for Firebase به شما این امکان را می دهد که به سرعت و به راحتی فایل ها را در یک سطل Cloud Storage که توسط Firebase تهیه و مدیریت می شود آپلود کنید.
یک مرجع ایجاد کنید
برای آپلود یک فایل، ابتدا یک مرجع Cloud Storage برای فایلی که می خواهید آپلود کنید ایجاد کنید .
میتوانید با اضافه کردن مسیرهای فرزند به ریشه سطل Cloud Storage خود، یک مرجع ایجاد کنید، یا میتوانید یک مرجع از یک نشانی اینترنتی gs://
یا https://
موجود ایجاد کنید که به یک شی در Cloud Storage ارجاع میدهد.
// 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 خود آپلود کنید. مرجع شما باید به نشانی اینترنتی فرزند اشاره داشته باشد.
آپلود فایل ها
هنگامی که یک مرجع دارید، می توانید فایل ها را به دو روش در Cloud Storage آپلود کنید:
- آپلود از یک آرایه بایت در حافظه
- آپلود از مسیر فایلی که نشان دهنده یک فایل در دستگاه است
آپلود از داده ها در حافظه
متد PutBytesAsync()
ساده ترین راه برای آپلود فایل در Cloud Storage است. 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 در اسناد بیابید.
مراحل بعدی
اکنون که فایلها را آپلود کردید، بیاموزیم که چگونه آنها را از Cloud Storage دانلود کنیم.