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

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

फाइलें अपलोड करें

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

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

// Create a reference to "mountains.jpg"
final mountainsRef = storageRef.child("mountains.jpg");

// Create a reference to 'images/mountains.jpg'
final mountainImagesRef = storageRef.child("images/mountains.jpg");

// While the file names are the same, the references point to different files
assert(mountainsRef.name == mountainImagesRef.name);
assert(mountainsRef.fullPath != mountainImagesRef.fullPath);

एक बार जब आप उचित संदर्भ बना लेते हैं, तो आप फ़ाइल को क्लाउड स्टोरेज पर अपलोड करने के लिए putFile() , putString() , या putData() विधि को कॉल करते हैं।

आप अपने क्लाउड स्टोरेज बकेट के रूट के संदर्भ में डेटा अपलोड नहीं कर सकते। आपका संदर्भ किसी चाइल्ड यूआरएल की ओर इंगित करना चाहिए।

किसी फ़ाइल से अपलोड करें

किसी फ़ाइल को अपलोड करने के लिए, आपको पहले उसके ऑन-डिवाइस स्थान का पूर्ण पथ प्राप्त करना होगा। उदाहरण के लिए, यदि कोई फ़ाइल एप्लिकेशन के दस्तावेज़ निर्देशिका में मौजूद है, तो फ़ाइल पथ उत्पन्न करने के लिए आधिकारिक path_provider पैकेज का उपयोग करें और इसे putFile() पर पास करें:

Directory appDocDir = await getApplicationDocumentsDirectory();
String filePath = '${appDocDir.absolute}/file-to-upload.png';
File file = File(filePath);

try {
  await mountainsRef.putFile(file);
} on firebase_core.FirebaseException catch (e) {
  // ...
}

एक स्ट्रिंग से अपलोड करें

आप putString() विधि का उपयोग करके डेटा को कच्चे, base64 , base64url , या data_url एन्कोडेड स्ट्रिंग के रूप में अपलोड कर सकते हैं। उदाहरण के लिए, डेटा यूआरएल के रूप में एन्कोड की गई टेक्स्ट स्ट्रिंग अपलोड करने के लिए:

String dataUrl = 'data:text/plain;base64,SGVsbG8sIFdvcmxkIQ==';

try {
  await mountainsRef.putString(dataUrl, format: PutStringFormat.dataUrl);
} on FirebaseException catch (e) {
  // ...
}

कच्चा डेटा अपलोड करना

आप उन मामलों के लिए निचले स्तर के टाइप किए गए डेटा को Uint8List के रूप में अपलोड कर सकते हैं जहां स्ट्रिंग या File अपलोड करना व्यावहारिक नहीं है। इस मामले में, अपने डेटा के साथ putData() विधि को कॉल करें:

try {
  // Upload raw data.
  await mountainsRef.putData(data);
} on firebase_core.FirebaseException catch (e) {
  // ...
}

एक डाउनलोड यूआरएल प्राप्त करें

फ़ाइल अपलोड करने के बाद, आप Reference पर getDownloadUrl() विधि को कॉल करके फ़ाइल डाउनलोड करने के लिए एक यूआरएल प्राप्त कर सकते हैं:

await mountainsRef.getDownloadURL();

फ़ाइल मेटाडेटा जोड़ें

फ़ाइलें अपलोड करते समय आप मेटाडेटा भी शामिल कर सकते हैं। इस मेटाडेटा में विशिष्ट फ़ाइल मेटाडेटा गुण जैसे contentType (आमतौर पर MIME प्रकार के रूप में जाना जाता है) शामिल हैं। putFile() विधि स्वचालित रूप से File एक्सटेंशन से MIME प्रकार का अनुमान लगाती है, लेकिन आप मेटाडेटा में contentType निर्दिष्ट करके स्वचालित रूप से पहचाने गए प्रकार को ओवरराइड कर सकते हैं। यदि आप contentType प्रदान नहीं करते हैं और क्लाउड स्टोरेज फ़ाइल एक्सटेंशन से डिफ़ॉल्ट का अनुमान नहीं लगा सकता है, तो क्लाउड स्टोरेज application/octet-stream उपयोग करता है। फ़ाइल मेटाडेटा का उपयोग करें देखें।

try {
  await mountainsRef.putFile(file, SettableMetadata(
    contentType: "image/jpeg",
  ));
} on firebase_core.FirebaseException catch (e) {
  // ...
}

अपलोड प्रबंधित करें

अपलोड शुरू करने के अलावा, आप stop pause() और cancel() तरीकों का उपयोग करके अपलोड को रोक सकते हैं, resume() और रद्द कर सकते हैं। घटनाओं को रोकें और फिर से शुरू करें, क्रमशः pause और progress स्थिति में बदलाव लाएँ। किसी अपलोड को रद्द करने से अपलोड विफल हो जाता है और एक त्रुटि यह दर्शाती है कि अपलोड रद्द कर दिया गया था।

final task = mountainsRef.putFile(largeFile);

// Pause the upload.
bool paused = await task.pause();
print('paused, $paused');

// Resume the upload.
bool resumed = await task.resume();
print('resumed, $resumed');

// Cancel the upload.
bool canceled = await task.cancel();
print('canceled, $canceled');

अपलोड प्रगति की निगरानी करें

आप अपने अपलोड कार्य में सफलता, विफलता, प्रगति या रुकावटों को संभालने के लिए किसी कार्य की ईवेंट स्ट्रीम सुन सकते हैं:

घटना प्रकार विशिष्ट उपयोग
TaskState.running डेटा स्थानांतरित होने पर समय-समय पर उत्सर्जित होता है और इसका उपयोग अपलोड/डाउनलोड संकेतक को पॉप्युलेट करने के लिए किया जा सकता है।
TaskState.paused किसी भी समय कार्य रुकने पर उत्सर्जित होता है।
TaskState.success कार्य सफलतापूर्वक पूरा होने पर उत्सर्जित किया जाता है।
TaskState.canceled किसी भी समय कार्य रद्द होने पर उत्सर्जित किया जाता है।
TaskState.error अपलोड विफल होने पर उत्सर्जित। ऐसा नेटवर्क टाइमआउट, प्राधिकरण विफलताओं या यदि आप कार्य रद्द करते हैं तो हो सकता है।
mountainsRef.putFile(file).snapshotEvents.listen((taskSnapshot) {
  switch (taskSnapshot.state) {
    case TaskState.running:
      // ...
      break;
    case TaskState.paused:
      // ...
      break;
    case TaskState.success:
      // ...
      break;
    case TaskState.canceled:
      // ...
      break;
    case TaskState.error:
      // ...
      break;
  }
});

त्रुटि प्रबंधन

अपलोड करते समय त्रुटियाँ होने के कई कारण हो सकते हैं, जिनमें स्थानीय फ़ाइल का मौजूदा न होना, या उपयोगकर्ता के पास वांछित फ़ाइल अपलोड करने की अनुमति न होना शामिल है। आप डॉक्स के हैंडल एरर्स अनुभाग में त्रुटियों के बारे में अधिक जानकारी पा सकते हैं।

पूर्ण उदाहरण

प्रगति निगरानी और त्रुटि प्रबंधन के साथ अपलोड का एक पूरा उदाहरण नीचे दिखाया गया है:

final appDocDir = await getApplicationDocumentsDirectory();
final filePath = "${appDocDir.absolute}/path/to/mountains.jpg";
final file = File(filePath);

// Create the file metadata
final metadata = SettableMetadata(contentType: "image/jpeg");

// Create a reference to the Firebase Storage bucket
final storageRef = FirebaseStorage.instance.ref();

// Upload file and metadata to the path 'images/mountains.jpg'
final uploadTask = storageRef
    .child("images/path/to/mountains.jpg")
    .putFile(file, metadata);

// Listen for state changes, errors, and completion of the upload.
uploadTask.snapshotEvents.listen((TaskSnapshot taskSnapshot) {
  switch (taskSnapshot.state) {
    case TaskState.running:
      final progress =
          100.0 * (taskSnapshot.bytesTransferred / taskSnapshot.totalBytes);
      print("Upload is $progress% complete.");
      break;
    case TaskState.paused:
      print("Upload is paused.");
      break;
    case TaskState.canceled:
      print("Upload was canceled");
      break;
    case TaskState.error:
      // Handle unsuccessful uploads
      break;
    case TaskState.success:
      // Handle successful uploads on complete
      // ...
      break;
  }
});

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