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

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

ফাইল আপলোড

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

// 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 (সাধারণত MIME প্রকার হিসাবে উল্লেখ করা হয়)। 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;
  }
});

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