获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

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

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

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

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

// 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 एन्कोडेड स्ट्रिंग के रूप में अपलोड कर सकते हैं। उदाहरण के लिए, डेटा 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) {
  // ...
}

एक डाउनलोड URL प्राप्त करें

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

await mountainsRef.getDownloadURL();

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

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

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

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

अपलोड शुरू करने के अलावा, आप pause() , resume() , और cancel() विधियों का उपयोग करके अपलोड को रोक सकते हैं, फिर से शुरू कर सकते हैं और रद्द कर सकते हैं। घटनाओं को रोकें और फिर से शुरू करें क्रमशः 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;
  }
});

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