ফ্লটারে ক্লাউড স্টোরেজ সহ ফাইল আপলোড করুন

ফায়ারবেসের জন্য ক্লাউড স্টোরেজ আপনাকে ফায়ারবেস দ্বারা সরবরাহিত এবং পরিচালিত ক্লাউড স্টোরেজ বাকেটে দ্রুত এবং সহজেই ফাইল আপলোড করতে দেয়।

ফাইল আপলোড করুন

ক্লাউড স্টোরেজে একটি ফাইল আপলোড করার জন্য, আপনাকে প্রথমে ফাইলের নাম সহ ফাইলের সম্পূর্ণ পথের একটি রেফারেন্স তৈরি করতে হবে।

// 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() পদ্ধতিটি কল করবেন।

আপনার ক্লাউড স্টোরেজ বাকেটের রুটের রেফারেন্স সহ ডেটা আপলোড করা যাবে না। আপনার রেফারেন্সটি অবশ্যই একটি চাইল্ড URL নির্দেশ করবে।

একটি ফাইল থেকে আপলোড করুন

একটি ফাইল আপলোড করার জন্য, আপনাকে প্রথমে তার ডিভাইসের অবস্থানের পরম পথ পেতে হবে। উদাহরণস্বরূপ, যদি কোনও ফাইল অ্যাপ্লিকেশনের ডকুমেন্ট ডিরেক্টরিতে থাকে, তাহলে অফিসিয়াল 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() পদ্ধতি ব্যবহার করে raw, base64 , base64url , অথবা data_url এনকোডেড স্ট্রিং হিসেবে ডেটা আপলোড করতে পারেন। উদাহরণস্বরূপ, ডেটা 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) {
  // ...
}

একটি ডাউনলোড URL পান

একটি ফাইল আপলোড করার পরে, আপনি Reference : এ getDownloadUrl() পদ্ধতিটি কল করে ফাইলটি ডাউনলোড করার জন্য একটি URL পেতে পারেন।

await mountainsRef.getDownloadURL();

ফাইল মেটাডেটা যোগ করুন

ফাইল আপলোড করার সময় আপনি মেটাডেটাও অন্তর্ভুক্ত করতে পারেন। এই মেটাডেটাতে সাধারণ ফাইল মেটাডেটা বৈশিষ্ট্য থাকে যেমন contentType (সাধারণত MIME টাইপ হিসাবে পরিচিত)। putFile() পদ্ধতিটি স্বয়ংক্রিয়ভাবে File এক্সটেনশন থেকে MIME টাইপ অনুমান করে, তবে আপনি মেটাডেটাতে contentType নির্দিষ্ট করে স্বয়ংক্রিয়ভাবে সনাক্ত করা টাইপটি ওভাররাইড করতে পারেন। যদি আপনি একটি contentType প্রদান না করেন এবং ক্লাউড স্টোরেজ ফাইল এক্সটেনশন থেকে একটি ডিফল্ট অনুমান করতে না পারে, তাহলে ক্লাউড স্টোরেজ application/octet-stream ব্যবহার করে। Use File Metadata দেখুন।

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;
  }
});

এখন যেহেতু আপনি ফাইল আপলোড করেছেন, আসুন শিখি কিভাবে ক্লাউড স্টোরেজ থেকে সেগুলি ডাউনলোড করবেন