فایلهای شما در یک مخزن ذخیرهسازی ابری (Cloud Storage Bucket) ذخیره میشوند. فایلهای موجود در این مخزن، درست مانند سیستم فایل روی هارد دیسک محلی شما یا دادههای موجود در پایگاه داده بلادرنگ Firebase، در یک ساختار سلسله مراتبی ارائه میشوند. با ایجاد یک ارجاع به یک فایل، برنامه شما به آن دسترسی پیدا میکند. سپس میتوان از این ارجاعها برای آپلود یا دانلود دادهها، دریافت یا بهروزرسانی فراداده یا حذف فایل استفاده کرد. یک ارجاع میتواند به یک فایل خاص یا به یک گره سطح بالاتر در سلسله مراتب اشاره کند.
اگر از پایگاه دادهی Realtime فایربیس استفاده کرده باشید، این مسیرها باید برای شما بسیار آشنا به نظر برسند. با این حال، دادههای فایل شما در فضای ذخیرهسازی ابری ذخیره میشوند، نه در پایگاه دادهی Realtime.
ایجاد یک مرجع
برای آپلود، دانلود یا حذف یک فایل، یا برای دریافت یا بهروزرسانی فرادادههای آن، یک مرجع ایجاد کنید. یک مرجع را میتوان به عنوان یک اشارهگر به یک فایل در ابر در نظر گرفت. مراجع سبک هستند، بنابراین میتوانید هر تعداد که نیاز دارید ایجاد کنید. همچنین آنها برای چندین عملیات قابل استفاده مجدد هستند.
با استفاده از نمونهی تکلایه FirebaseStorage و فراخوانی متد ref() آن، یک مرجع ایجاد کنید.
final storageRef = FirebaseStorage.instance.ref();
در مرحله بعد، میتوانید با استفاده از متد child() روی یک مرجع موجود، یک مرجع به مکانی پایینتر در درخت، مثلاً "images/space.jpg" ایجاد کنید.
// Create a child reference
// imagesRef now points to "images"
final imagesRef = storageRef.child("images");
// Child references can also take paths
// spaceRef now points to "images/space.jpg
// imagesRef still points to "images"
final spaceRef = storageRef.child("images/space.jpg");
پیمایش با ارجاعات
همچنین میتوانید از ویژگیهای parent و root برای حرکت به سمت بالا در سلسله مراتب فایل ما استفاده کنید. parent یک سطح به بالا حرکت میکند، در حالی که root تا انتها حرکت میکند.
// parent allows us to move our reference to a parent node
// imagesRef2 now points to 'images'
final imagesRef2 = spaceRef.parent;
// root allows us to move all the way back to the top of our bucket
// rootRef now points to the root
final rootRef = spaceRef.root;
child() ، parent و root میتوانند چندین بار به هم زنجیر شوند، زیرا هر کدام یک ارجاع هستند. اما دسترسی به root.parent منجر به null میشود.
// References can be chained together multiple times
// earthRef points to 'images/earth.jpg'
final earthRef = spaceRef.parent?.child("earth.jpg");
// nullRef is null, since the parent of root is null
final nullRef = spaceRef.root.parent;
ویژگیهای مرجع
شما میتوانید ارجاعها را بررسی کنید تا فایلهایی را که به آنها اشاره میکنند با استفاده از ویژگیهای fullPath ، name و bucket بهتر درک کنید. این ویژگیها مسیر کامل، نام و bucket فایل را دریافت میکنند.
// Reference's path is: "images/space.jpg"
// This is analogous to a file path on disk
spaceRef.fullPath;
// Reference's name is the last segment of the full path: "space.jpg"
// This is analogous to the file name
spaceRef.name;
// Reference's bucket is the name of the storage bucket that the files are stored in
spaceRef.bucket;
محدودیتهای مربوط به منابع
مسیرها و نامهای مرجع میتوانند شامل هر دنباله از کاراکترهای معتبر یونیکد باشند، اما محدودیتهای خاصی اعمال میشود، از جمله:
- طول کل reference.fullPath هنگام کدگذاری UTF-8 باید بین ۱ تا ۱۰۲۴ بایت باشد.
- بدون کاراکترهای بازگشت به خط یا تغذیه خط.
- از استفاده از
#،[،]،*یا?خودداری کنید، زیرا این علائم با ابزارهای دیگری مانند Firebase Realtime Database یا gsutil به خوبی کار نمیکنند.
مثال کامل
// Points to the root reference
final storageRef = FirebaseStorage.instance.ref();
// Points to "images"
Reference? imagesRef = storageRef.child("images");
// Points to "images/space.jpg"
// Note that you can use variables to create child values
final fileName = "space.jpg";
final spaceRef = imagesRef.child(fileName);
// File path is "images/space.jpg"
final path = spaceRef.fullPath;
// File name is "space.jpg"
final name = spaceRef.name;
// Points to "images"
imagesRef = spaceRef.parent;
در ادامه، نحوه آپلود فایلها در فضای ذخیرهسازی ابری را بررسی خواهیم کرد.