Flutter'da Cloud Storage ile dosya indirme

Cloud Storage for Firebase, indirme işlemini hızlı ve kolay bir şekilde gerçekleştirmenize olanak tanır Cloud Storage'daki dosyaları Firebase tarafından sağlanır ve yönetilir.

Referans Oluşturma

Dosya indirmek için önce bir Cloud Storage referansı oluşturun dosyasını seçin.

Cloud Storage paketine göz atabilir veya mevcut bir paketten referans oluşturabilirsiniz. Cloud Storage'da bir nesneye referans veren gs:// veya https:// URL'si.

// 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");

Dosyaları İndir

Referans edindikten sonra dosyaları Cloud Storage'dan indirebilirsiniz getData() veya getStream() numaralı telefonu arayarak. Dosyayı indirmeyi tercih ederseniz başka bir kitaplıkla, getDownloadUrl() ile bir indirme URL'si alabilirsiniz.

Bellekte indir

Dosyayı, getData() yöntemini kullanarak bir UInt8List konumuna indirin. Bu, bir dosyayı indirmenin en kolay yoludur, ancak dosyanın hafızaya alabilirsiniz. Uygulamanızın kullanılabilir olduğundan daha büyük bir dosya için istekte bulunursanız uygulamanız kilitlenir. Bellek sorunlarına karşı koruma sağlamak için getData() indirilmeleri maksimum bayttır. Maksimum boyutu bir değere ayarla veya başka bir indirme yöntemi kullanabilirsiniz.

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.
}

Yerel dosyaya indir

writeToFile() yöntemi, dosyayı doğrudan yerel bir cihaza indirir. Bu seçeneği aşağıdaki durumlarda kullanın: Kullanıcılarınız çevrimdışıyken dosyaya erişmek veya dosyayı bir ekleyebilirsiniz. writeToFile(), yönetmek için kullanabileceğiniz bir DownloadTask döndürür yardımcı olabilir ve indirme işleminin durumunu izleyebilirsiniz.

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

Verileri URL Yoluyla İndir

URL'leri temel alan bir indirme altyapınız varsa veya paylaşmak istiyorsanız, getDownloadURL() yöntemini çağırın.

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

Hataları Giderme

İndirme sırasında hataların oluşmasının birkaç nedeni vardır: dosya mevcut değil veya kullanıcının istenen dosyaya erişim izni yok. Hatalarla ilgili daha fazla bilgiyi Hataları İşleyici bölümünde bulabilirsiniz. bölümünde bulabilirsiniz.

Tam Örnek

Hata işleme kullanılan bir indirme örneği aşağıda verilmiştir:

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

Ayrıca, depolanan dosyalar için meta verileri alıp güncelleyebilirsiniz .