Flutter पर Cloud Storage का इस्तेमाल करके फ़ाइलें अपलोड करना

Firebase के लिए Cloud Storage आपको जल्दी और आसानी से Cloud Storage बकेट दिया गया और Firebase से मैनेज होता है.

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

Cloud Storage में फ़ाइल अपलोड करने के लिए, आपको पहले फ़ाइल का पूरा पाथ शामिल करें.

// 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() तरीके Cloud Storage में ले जाते हैं.

आप अपने Cloud Storage बकेट. आपका संदर्भ किसी चाइल्ड यूआरएल पर ले जाना चाहिए.

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

किसी फ़ाइल को अपलोड करने के लिए, आपको पहले उसके डिवाइस पर ऐब्सलूट पाथ को पाना होगा स्थान. उदाहरण के लिए, अगर ऐप्लिकेशन के दस्तावेज़ों में कोई फ़ाइल मौजूद है डायरेक्ट्री में, आधिकारिक 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) {
  // ...
}

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

डेटा को रॉ, base64, base64url या data_url कोड में बदलकर अपलोड किया जा सकता है स्ट्रिंग जिसमें putString() तरीके का इस्तेमाल किया जाता है. उदाहरण के लिए, टेक्स्ट स्ट्रिंग अपलोड करने के लिए डेटा यूआरएल के तौर पर एन्कोड किया गया:

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 उपलब्ध नहीं कराते हैं. साथ ही, Cloud Storage, डिफ़ॉल्ट रूप से सेट हो जाता है, तो Cloud Storage 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;
  }
});

अब जब आपने फ़ाइलें अपलोड कर ली हैं, तो आइए अब उन्हें डाउनलोड करने का तरीका जानें Cloud Storage से.