Flutter पर Cloud Storage की मदद से फ़ाइलें डाउनलोड करना

Firebase के लिए Cloud Storage की मदद से, Firebase की ओर से उपलब्ध कराई गई और मैनेज की गई Cloud Storage बकेट से फ़ाइलों को तुरंत और आसानी से डाउनलोड किया जा सकता है.

रेफ़रंस बनाना

किसी फ़ाइल को डाउनलोड करने के लिए, सबसे पहले उस फ़ाइल का Cloud Storage रेफ़रंस बनाएं जिसे डाउनलोड करना है.

अपने Cloud Storage बकेट के रूट में चाइल्ड पाथ जोड़कर, रेफ़रंस बनाया जा सकता है. इसके अलावा, Cloud Storage में मौजूद किसी ऑब्जेक्ट का रेफ़रंस देने वाले किसी मौजूदा gs:// या https:// यूआरएल से भी रेफ़रंस बनाया जा सकता है.

// 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() को कॉल करके, Cloud Storage से फ़ाइलें डाउनलोड की जा सकती हैं. अगर आपको किसी दूसरी लाइब्रेरी से फ़ाइल डाउनलोड करनी है, तो getDownloadUrl() का इस्तेमाल करके डाउनलोड करने का यूआरएल पाया जा सकता है.

मेमोरी में डाउनलोड करना

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;
  }
});

यूआरएल की मदद से डेटा डाउनलोड करना

अगर आपके पास पहले से ही यूआरएल पर आधारित डाउनलोड इन्फ़्रास्ट्रक्चर है या आपको सिर्फ़ शेयर करने के लिए यूआरएल चाहिए, तो किसी फ़ाइल के लिए डाउनलोड यूआरएल पाएं. इसके लिए, Cloud Storage के रेफ़रंस पर getDownloadURL() तरीका आज़माएं.

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;
  }
});

Cloud Storage में सेव की गई फ़ाइलों का मेटाडेटा भी पाया और अपडेट किया जा सकता है.