قم بتنزيل الملفات باستخدام Cloud Storage على Flutter

يتيح لك Cloud Storage for Firebase تنزيل الملفات بسرعة وسهولة من مجموعة Cloud Storage التي توفرها وتديرها Firebase.

إنشاء مرجع

لتنزيل ملف، قم أولاً بإنشاء مرجع Cloud Storage للملف الذي تريد تنزيله.

يمكنك إنشاء مرجع عن طريق إلحاق مسارات فرعية بجذر مجموعة Cloud Storage، أو يمكنك إنشاء مرجع من عنوان URL موجود gs:// أو https:// يشير إلى كائن في Cloud Storage.

// Create a storage reference from our app
final storageRef = FirebaseStorage.instance.ref();

// Create a reference with an initial file path and name
final pathReference = storageRef.child("images/stars.jpg");

// Create a reference to a file from a Google Cloud Storage URI
final gsReference =
    FirebaseStorage.instance.refFromURL("gs://YOUR_BUCKET/images/stars.jpg");

// Create a reference from an HTTPS URL
// Note that in the URL, characters are URL escaped!
final httpsReference = FirebaseStorage.instance.refFromURL(
    "https://firebasestorage.googleapis.com/b/YOUR_BUCKET/o/images%20stars.jpg");

تحميل ملفات

بمجرد حصولك على مرجع، يمكنك تنزيل الملفات من Cloud Storage عن طريق استدعاء getData() أو getStream() . إذا كنت تفضل تنزيل الملف من مكتبة أخرى، فيمكنك الحصول على عنوان URL للتنزيل باستخدام getDownloadUrl() .

تحميل في الذاكرة

قم بتنزيل الملف إلى UInt8List باستخدام طريقة getData() . هذه هي الطريقة الأسهل لتنزيل ملف، ولكن يجب تحميل محتويات الملف بالكامل إلى الذاكرة. إذا طلبت ملفًا أكبر من الذاكرة المتوفرة لتطبيقك، فسيتعطل تطبيقك. للحماية من مشاكل الذاكرة، تأخذ getData() أقصى قدر من البايتات للتنزيل. قم بتعيين الحد الأقصى للحجم على شيء تعرف أن تطبيقك يمكنه التعامل معه، أو استخدم طريقة تنزيل أخرى.

final islandRef = storageRef.child("images/island.jpg");

try {
  const oneMegabyte = 1024 * 1024;
  final Uint8List? data = await islandRef.getData(oneMegabyte);
  // Data for "images/island.jpg" is returned, use this as needed.
} on FirebaseException catch (e) {
  // Handle any errors.
}

تحميل إلى ملف محلي

تقوم طريقة writeToFile() بتنزيل الملف مباشرة إلى جهاز محلي. استخدم هذا إذا كان المستخدمون لديك يريدون الوصول إلى الملف أثناء عدم الاتصال بالإنترنت أو مشاركة الملف في تطبيق مختلف. ترجع الدالة writeToFile() DownloadTask والتي يمكنك استخدامها لإدارة التنزيل ومراقبة حالة التنزيل.

final islandRef = storageRef.child("images/island.jpg");

final appDocDir = await getApplicationDocumentsDirectory();
final filePath = "${appDocDir.absolute}/images/island.jpg";
final file = File(filePath);

final downloadTask = islandRef.writeToFile(file);
downloadTask.snapshotEvents.listen((taskSnapshot) {
  switch (taskSnapshot.state) {
    case TaskState.running:
      // TODO: Handle this case.
      break;
    case TaskState.paused:
      // TODO: Handle this case.
      break;
    case TaskState.success:
      // TODO: Handle this case.
      break;
    case TaskState.canceled:
      // TODO: Handle this case.
      break;
    case TaskState.error:
      // TODO: Handle this case.
      break;
  }
});

تنزيل البيانات عبر URL

إذا كانت لديك بالفعل بنية أساسية للتنزيل تعتمد على عناوين URL، أو كنت تريد فقط مشاركة عنوان URL، فيمكنك الحصول على عنوان URL لتنزيل ملف عن طريق استدعاء طريقة getDownloadURL() على مرجع التخزين السحابي.

final imageUrl =
    await storageRef.child("users/me/profile.png").getDownloadURL();

التعامل مع الأخطاء

هناك عدد من الأسباب التي قد تؤدي إلى حدوث أخطاء عند التنزيل، بما في ذلك الملف غير موجود، أو عدم حصول المستخدم على إذن للوصول إلى الملف المطلوب. يمكن العثور على مزيد من المعلومات حول الأخطاء في قسم التعامل مع الأخطاء في المستندات.

مثال كامل

يظهر أدناه مثال كامل للتنزيل مع معالجة الأخطاء:

final islandRef = storageRef.child("images/island.jpg");

final appDocDir = await getApplicationDocumentsDirectory();
final filePath = "${appDocDir.absolute}/images/island.jpg";
final file = File(filePath);

final downloadTask = islandRef.writeToFile(file);
downloadTask.snapshotEvents.listen((taskSnapshot) {
  switch (taskSnapshot.state) {
    case TaskState.running:
      // TODO: Handle this case.
      break;
    case TaskState.paused:
      // TODO: Handle this case.
      break;
    case TaskState.success:
      // TODO: Handle this case.
      break;
    case TaskState.canceled:
      // TODO: Handle this case.
      break;
    case TaskState.error:
      // TODO: Handle this case.
      break;
  }
});

يمكنك أيضًا الحصول على البيانات التعريفية للملفات المخزنة في Cloud Storage وتحديثها .