ফ্লটারে ক্লাউড স্টোরেজ সহ ফাইল ডাউনলোড করুন

Firebase-এর জন্য ক্লাউড স্টোরেজ আপনাকে Firebase দ্বারা প্রদত্ত এবং পরিচালিত ক্লাউড স্টোরেজ বাকেট থেকে দ্রুত এবং সহজে ফাইল ডাউনলোড করতে দেয়।

একটি রেফারেন্স তৈরি করুন

একটি ফাইল ডাউনলোড করতে, প্রথমে আপনি যে ফাইলটি ডাউনলোড করতে চান তার একটি ক্লাউড স্টোরেজ রেফারেন্স তৈরি করুন

আপনি আপনার ক্লাউড স্টোরেজ বাকেটের রুটে চাইল্ড পাথ যুক্ত করে একটি রেফারেন্স তৈরি করতে পারেন, অথবা আপনি ক্লাউড স্টোরেজের একটি অবজেক্টকে উল্লেখ করে বিদ্যমান gs:// বা https:// URL থেকে একটি রেফারেন্স তৈরি করতে পারেন।

// Create a storage reference from our app
final storageRef = FirebaseStorage.instance.ref();

// Create a reference with an initial file path and name
final pathReference = storageRef.child("images/stars.jpg");

// Create a reference to a file from a Google Cloud Storage URI
final gsReference =
    FirebaseStorage.instance.refFromURL("gs://YOUR_BUCKET/images/stars.jpg");

// Create a reference from an HTTPS URL
// Note that in the URL, characters are URL escaped!
final httpsReference = FirebaseStorage.instance.refFromURL(
    "https://firebasestorage.googleapis.com/b/YOUR_BUCKET/o/images%20stars.jpg");

ফাইল ডাউনলোড করুন

একবার আপনার কাছে একটি রেফারেন্স থাকলে, আপনি getData() বা getStream() এ কল করে ক্লাউড স্টোরেজ থেকে ফাইলগুলি ডাউনলোড করতে পারেন৷ আপনি যদি অন্য লাইব্রেরি দিয়ে ফাইলটি ডাউনলোড করতে পছন্দ করেন, তাহলে getDownloadUrl() দিয়ে একটি ডাউনলোড URL পেতে পারেন।

মেমরিতে ডাউনলোড করুন

getData() পদ্ধতিতে ফাইলটিকে একটি UInt8List এ ডাউনলোড করুন। এটি একটি ফাইল ডাউনলোড করার সবচেয়ে সহজ উপায়, কিন্তু এটি আপনার ফাইলের সম্পূর্ণ বিষয়বস্তু মেমরিতে লোড করতে হবে। আপনি আপনার অ্যাপের উপলব্ধ মেমরির চেয়ে বড় ফাইলের অনুরোধ করলে, আপনার অ্যাপ ক্র্যাশ হয়ে যাবে। মেমরি সমস্যা থেকে রক্ষা করতে, getData() ডাউনলোড করতে সর্বাধিক পরিমাণ বাইট লাগে। আপনার অ্যাপটি পরিচালনা করতে পারে এমন কিছুতে সর্বাধিক আকার সেট করুন বা অন্য ডাউনলোড পদ্ধতি ব্যবহার করুন।

final islandRef = storageRef.child("images/island.jpg");

try {
  const oneMegabyte = 1024 * 1024;
  final Uint8List? data = await islandRef.getData(oneMegabyte);
  // Data for "images/island.jpg" is returned, use this as needed.
} on FirebaseException catch (e) {
  // Handle any errors.
}

একটি স্থানীয় ফাইল ডাউনলোড করুন

writeToFile() পদ্ধতি একটি ফাইল সরাসরি স্থানীয় ডিভাইসে ডাউনলোড করে। যদি আপনার ব্যবহারকারীরা অফলাইনে থাকা অবস্থায় ফাইলটিতে অ্যাক্সেস পেতে বা অন্য কোনো অ্যাপে ফাইলটি শেয়ার করতে চান তাহলে এটি ব্যবহার করুন। writeToFile() একটি DownloadTask প্রদান করে যা আপনি আপনার ডাউনলোড পরিচালনা করতে এবং ডাউনলোডের স্থিতি নিরীক্ষণ করতে ব্যবহার করতে পারেন।

final islandRef = storageRef.child("images/island.jpg");

final appDocDir = await getApplicationDocumentsDirectory();
final filePath = "${appDocDir.absolute}/images/island.jpg";
final file = File(filePath);

final downloadTask = islandRef.writeToFile(file);
downloadTask.snapshotEvents.listen((taskSnapshot) {
  switch (taskSnapshot.state) {
    case TaskState.running:
      // TODO: Handle this case.
      break;
    case TaskState.paused:
      // TODO: Handle this case.
      break;
    case TaskState.success:
      // TODO: Handle this case.
      break;
    case TaskState.canceled:
      // TODO: Handle this case.
      break;
    case TaskState.error:
      // TODO: Handle this case.
      break;
  }
});

URL এর মাধ্যমে ডেটা ডাউনলোড করুন

আপনার যদি ইতিমধ্যেই ইউআরএল ভিত্তিক ডাউনলোড অবকাঠামো থাকে, বা শুধুমাত্র একটি URL শেয়ার করতে চান, তাহলে আপনি ক্লাউড স্টোরেজ রেফারেন্সে getDownloadURL() পদ্ধতিতে কল করে একটি ফাইলের জন্য ডাউনলোড URL পেতে পারেন।

final imageUrl =
    await storageRef.child("users/me/profile.png").getDownloadURL();

হ্যান্ডেল ত্রুটি

ফাইলটি বিদ্যমান না থাকা বা ব্যবহারকারীর পছন্দসই ফাইলটি অ্যাক্সেস করার অনুমতি না থাকা সহ ডাউনলোডে ত্রুটি ঘটতে পারে এমন অনেকগুলি কারণ রয়েছে৷ ত্রুটিগুলি সম্পর্কে আরও তথ্য ডক্সের হ্যান্ডেল ত্রুটি বিভাগে পাওয়া যাবে৷

সম্পূর্ণ উদাহরণ

ত্রুটি পরিচালনা সহ একটি ডাউনলোডের একটি সম্পূর্ণ উদাহরণ নীচে দেখানো হয়েছে:

final islandRef = storageRef.child("images/island.jpg");

final appDocDir = await getApplicationDocumentsDirectory();
final filePath = "${appDocDir.absolute}/images/island.jpg";
final file = File(filePath);

final downloadTask = islandRef.writeToFile(file);
downloadTask.snapshotEvents.listen((taskSnapshot) {
  switch (taskSnapshot.state) {
    case TaskState.running:
      // TODO: Handle this case.
      break;
    case TaskState.paused:
      // TODO: Handle this case.
      break;
    case TaskState.success:
      // TODO: Handle this case.
      break;
    case TaskState.canceled:
      // TODO: Handle this case.
      break;
    case TaskState.error:
      // TODO: Handle this case.
      break;
  }
});

এছাড়াও আপনি ক্লাউড স্টোরেজে সংরক্ষিত ফাইলগুলির জন্য মেটাডেটা পেতে এবং আপডেট করতে পারেন৷