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

Cloud Storage for Firebase की मदद से, 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");

फ़ाइलें डाउनलोड करना

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