फ़्लटर पर क्लाउड स्टोरेज के साथ फ़ाइलें डाउनलोड करें

फायरबेस के लिए क्लाउड स्टोरेज आपको फायरबेस द्वारा प्रदान और प्रबंधित क्लाउड स्टोरेज बकेट से फ़ाइलों को जल्दी और आसानी से डाउनलोड करने की अनुमति देता है।

एक संदर्भ बनाएँ

किसी फ़ाइल को डाउनलोड करने के लिए, पहले उस फ़ाइल का क्लाउड स्टोरेज संदर्भ बनाएं जिसे आप डाउनलोड करना चाहते हैं।

आप अपने क्लाउड स्टोरेज बकेट के रूट में चाइल्ड पाथ जोड़कर एक संदर्भ बना सकते हैं, या आप क्लाउड स्टोरेज में किसी ऑब्जेक्ट को संदर्भित करने वाले मौजूदा 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() पर कॉल करके क्लाउड स्टोरेज से फ़ाइलें डाउनलोड कर सकते हैं। यदि आप फ़ाइल को किसी अन्य लाइब्रेरी से डाउनलोड करना पसंद करते हैं, तो आप 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;
  }
});

यूआरएल के माध्यम से डेटा डाउनलोड करें

यदि आपके पास पहले से ही यूआरएल पर आधारित डाउनलोड इंफ्रास्ट्रक्चर है, या आप साझा करने के लिए एक यूआरएल चाहते हैं, तो आप क्लाउड स्टोरेज संदर्भ पर 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;
  }
});

आप क्लाउड स्टोरेज में संग्रहीत फ़ाइलों के लिए मेटाडेटा भी प्राप्त और अपडेट कर सकते हैं।