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

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

*.appspot.com

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

कोई फ़ाइल डाउनलोड करने के लिए, सबसे पहले उस फ़ाइल का 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() को कॉल करके 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 में सेव की गई फ़ाइलों के लिए, मेटाडेटा पाया और अपडेट भी किया जा सकता है.