ফায়ারবেসের জন্য ক্লাউড স্টোরেজ আপনাকে ফায়ারবেস দ্বারা সরবরাহকৃত ও পরিচালিত একটি ক্লাউড স্টোরেজ বাকেটে দ্রুত এবং সহজে ফাইল আপলোড করার সুযোগ দেয়।
ফাইল আপলোড করুন
ক্লাউড স্টোরেজে কোনো ফাইল আপলোড করতে হলে, প্রথমে ফাইলের নামসহ ফাইলটির সম্পূর্ণ পাথের একটি রেফারেন্স তৈরি করতে হবে।
// 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() মেথড কল করতে হবে।
আপনি আপনার ক্লাউড স্টোরেজ বাকেটের রুটের রেফারেন্স ব্যবহার করে ডেটা আপলোড করতে পারবেন না। আপনার রেফারেন্সটি অবশ্যই একটি চাইল্ড ইউআরএল-কে নির্দেশ করতে হবে।
ফাইল থেকে আপলোড করুন
একটি ফাইল আপলোড করার জন্য, আপনাকে প্রথমে ডিভাইসে থাকা ফাইলটির অ্যাবসোলিউট পাথ (absolute path) পেতে হবে। উদাহরণস্বরূপ, যদি ফাইলটি অ্যাপ্লিকেশনটির ডকুমেন্টস ডিরেক্টরির মধ্যে থাকে, তাহলে অফিসিয়াল 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) {
// ...
}
কাঁচা ডেটা আপলোড করা হচ্ছে
যেসব ক্ষেত্রে স্ট্রিং বা File আপলোড করা সুবিধাজনক নয়, সেসব ক্ষেত্রে আপনি Uint8List আকারে নিম্ন-স্তরের টাইপের ডেটা আপলোড করতে পারেন। এক্ষেত্রে, আপনার ডেটা দিয়ে putData() মেথডটি কল করুন:
try {
// Upload raw data.
await mountainsRef.putData(data);
} on firebase_core.FirebaseException catch (e) {
// ...
}
ডাউনলোড ইউআরএল পান
ফাইল আপলোড করার পরে, Reference getDownloadUrl() মেথডটি কল করে আপনি ফাইলটি ডাউনলোড করার জন্য একটি URL পেতে পারেন।
await mountainsRef.getDownloadURL();
ফাইল মেটাডেটা যোগ করুন
ফাইল আপলোড করার সময় আপনি মেটাডেটাও অন্তর্ভুক্ত করতে পারেন। এই মেটাডেটাতে সাধারণ ফাইল মেটাডেটা প্রোপার্টি যেমন contentType (যা সাধারণত MIME type নামে পরিচিত) থাকে। putFile() মেথডটি File এক্সটেনশন থেকে স্বয়ংক্রিয়ভাবে MIME type অনুমান করে নেয়, কিন্তু আপনি মেটাডেটাতে 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 pause() , resume() , এবং cancel() মেথডগুলো ব্যবহার করে আপলোড পজ, রিজুম এবং ক্যানসেল করতে পারেন। Pause এবং 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;
}
});
ত্রুটি পরিচালনা
আপলোড করার সময় বিভিন্ন কারণে ত্রুটি ঘটতে পারে, যার মধ্যে রয়েছে স্থানীয়ভাবে ফাইলটির অস্তিত্ব না থাকা, অথবা কাঙ্ক্ষিত ফাইলটি আপলোড করার জন্য ব্যবহারকারীর অনুমতি না থাকা। আপনি ডকুমেন্টেশনের ' Handle Errors' বিভাগে ত্রুটি সম্পর্কে আরও তথ্য পেতে পারেন।
সম্পূর্ণ উদাহরণ
অগ্রগতি পর্যবেক্ষণ এবং ত্রুটি পরিচালনা সহ একটি আপলোডের সম্পূর্ণ উদাহরণ নিচে দেখানো হলো:
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;
}
});
এখন যেহেতু আপনি ফাইলগুলো আপলোড করেছেন, চলুন জেনে নিই ক্লাউড স্টোরেজ থেকে কীভাবে সেগুলো ডাউনলোড করতে হয়।