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);
सही रेफ़रंस बनाने के बाद, फ़ाइल को Cloud Storage में अपलोड करने के लिए, putFile()
, putString()
या putData()
का इस्तेमाल करें.
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) {
// ...
}
स्ट्रिंग से अपलोड करना
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
एक्सटेंशन से एमआईएम टाइप का पता अपने-आप लगाता है. हालांकि, मेटाडेटा में 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 से उन्हें डाउनलोड करने का तरीका जानें.