Cloud Storage for Firebase به شما امکان میدهد تا به سرعت و به راحتی فایلها را در یک مخزن Cloud Storage که توسط فایربیس ارائه و مدیریت میشود، آپلود کنید.
ایجاد یک مرجع
برای آپلود فایل، ابتدا یک مرجع 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 خود آپلود کنید. ارجاع شما باید به یک URL فرزند اشاره کند.
آپلود فایلها
وقتی مرجع را پیدا کردید، میتوانید فایلها را به دو روش در Cloud Storage آپلود کنید:
- آپلود از یک آرایه بایتی در حافظه
- آپلود از یک مسیر فایل که نشاندهنده فایل روی دستگاه است
آپلود از دادههای موجود در حافظه
متد PutBytesAsync() سادهترین راه برای آپلود فایل در Cloud Storage است. PutBytesAsync() یک byte[] میگیرد و یک 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() استفاده کنید. برای اطلاعات بیشتر به مدیریت آپلودها مراجعه کنید.
افزودن متادیتای فایل
همچنین میتوانید هنگام آپلود فایلها، فراداده (metadata) را نیز اضافه کنید. این فراداده شامل ویژگیهای معمول فراداده فایل مانند Name ، Size ) و ContentType (که معمولاً به عنوان نوع MIME شناخته میشود) است. متد PutFileAsync() به طور خودکار نوع محتوا را از پسوند نام فایل استنباط میکند، اما میتوانید با مشخص کردن ContentType در فراداده، نوع شناساییشده خودکار را لغو کنید. اگر نوع ContentType را ارائه ندهید و Cloud Storage نتواند پیشفرض را از پسوند فایل استنباط کند، Cloud Storage از application/octet-stream استفاده میکند. برای اطلاعات بیشتر در مورد فراداده فایل، به بخش استفاده از فراداده فایل مراجعه کنید.
// 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."); } });
مدیریت خطا
دلایل مختلفی برای بروز خطا در هنگام آپلود وجود دارد، از جمله عدم وجود فایل محلی یا عدم دسترسی کاربر برای آپلود فایل مورد نظر. میتوانید اطلاعات بیشتر در مورد خطاها را در بخش «مدیریت خطاها» در مستندات بیابید.
مراحل بعدی
حالا که فایلها را آپلود کردهاید، بیایید یاد بگیریم که چگونه آنها را از Cloud Storage دانلود کنیم.