ایجاد کردن مرجع Cloud Storage در Flutter

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

اگر از پایگاه داده بی‌درنگ Firebase استفاده کرده باشید، این مسیرها باید برایتان بسیار آشنا باشد. اما داده‌های فایل شما در Cloud Storage ذخیره می‌شود، نه در Realtime Database.

ایجاد مرجع

مرجعی برای بارگذاری، بارگیری، یا حذف فایل، یا دریافت یا به‌روزرسانی فراداده آن ایجاد کنید. مرجع را می‌توان به‌عنوان اشاره‌گری به فایل در فضای ابری درنظر گرفت. مرجع‌ها سبک هستند، بنابراین می‌توانید هر تعداد که نیاز دارید ایجاد کنید. همچنین برای چندین عملیات قابل‌استفاده مجدد هستند.

بااستفاده از نمونه تک‌گانه FirebaseStorage و فراخوانی روش ref() آن، مرجعی ایجاد کنید.

final storageRef = FirebaseStorage.instance.ref();

سپس می‌توانید مرجعی برای مکان پایین‌تر در درخت ایجاد کنید، مثلاً "images/space.jpg" بااستفاده از روش child() در مرجع موجود.

// 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، ارجاع‌ها را بررسی کنید تا فایل‌هایی را که به آن‌ها اشاره می‌کنند بهتر درک کنید. این ویژگی‌ها مسیر کامل، نام، و سطل فایل را دریافت می‌کنند.

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

محدودیت‌های مرجع‌ها

مسیرها و نام‌های مرجع می‌توانند شامل هر توالی از نویسه‌های معتبر Unicode باشند، اما محدودیت‌های خاصی اعمال می‌شود، ازجمله:

  1. طول کل reference.fullPath باید بین ۱ تا ۱۰۲۴ بایت هنگام کدگذاری UTF-8 باشد.
  2. بدون نویسه‌های «بازگشت نورد» یا «تعویض خط».
  3. از #، [، ]، *، یا ? استفاده نکنید، زیرا این موارد با ابزارهای دیگر مانند پایگاه داده بی‌درنگ Firebase یا 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;

در مرحله بعد، بیایید با نحوه بارگذاری فایل‌ها در Cloud Storage آشنا شویم.