Flutter'da Cloud Storage ile dosya yükleme

Cloud Storage for Firebase, dosyalarınızı bir API'ye hızla ve kolayca yüklemenizi sağlar. Sağlanan Cloud Storage paketi Firebase tarafından yönetilir.

Dosya Yükle

Bir dosyayı Cloud Storage'a yüklemek için önce tam yolunu sunar.

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

Uygun bir referans oluşturduktan sonra Dosyayı yüklemek için putFile(), putString() veya putData() yöntemi Cloud Storage'a taşıdık.

Cloud Storage paketi. Referansınız bir alt URL'ye yönlendirmelidir.

Dosyadan yükle

Dosya yüklemek için önce cihazın üzerindeki mutlak yolunu öğrenmeniz gerekir konum. Örneğin, bir dosya uygulamanın dokümanlarında bulunuyorsa dizinini kullanmak için resmi path_provider paketinde bir dosya yolu oluşturup bunu putFile() hizmetine iletecek:

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) {
  // ...
}

Dizeden yükle

Verileri ham, base64, base64url veya data_url olarak kodlanmış olarak yükleyebilirsiniz dizesi için putString() yöntemini kullanın. Örneğin, bir metin dizesi yüklemek Veri URL'si olarak kodlanır:

String dataUrl = 'data:text/plain;base64,SGVsbG8sIFdvcmxkIQ==';

try {
  await mountainsRef.putString(dataUrl, format: PutStringFormat.dataUrl);
} on FirebaseException catch (e) {
  // ...
}

Ham verileri yükleme

Daha düşük düzeyde yazılmış verileri Uint8List biçiminde yükleyebilirsiniz. bir dize veya File yüklemenin pratik olmadığı durumlarda kullanın. Burada verilerinizi içeren putData() yöntemini çağırın:

try {
  // Upload raw data.
  await mountainsRef.putData(data);
} on firebase_core.FirebaseException catch (e) {
  // ...
}

İndirme URL'si al

Bir dosya yükledikten sonra, Reference üzerindeki getDownloadUrl() yöntemi:

await mountainsRef.getDownloadURL();

Dosya Meta Verileri Ekleme

Dosya yüklerken meta verileri de ekleyebilirsiniz. Bu meta veri, contentType gibi tipik dosya meta verisi özelliklerini içerir (genellikle MIME türü olarak ifade edilir). putFile() yöntemi MIME türünü File uzantısından otomatik olarak çıkarır, ancak Meta veride contentType belirterek otomatik olarak algılanan türü geçersiz kılabilirsiniz. Eğer bir contentType sağlamazsanız Cloud Storage, Cloud Storage, dosya uzantısından varsayılan olarak application/octet-stream. Dosya Meta Verilerini Kullanma başlıklı makaleye göz atın.

try {
  await mountainsRef.putFile(file, SettableMetadata(
    contentType: "image/jpeg",
  ));
} on firebase_core.FirebaseException catch (e) {
  // ...
}

Yüklemeleri Yönet

Yüklemeleri başlatmanın yanı sıra aşağıdakileri kullanarak yüklemeleri duraklatabilir, devam ettirebilir ve iptal edebilirsiniz: pause(), resume() ve cancel() yöntemleri. Etkinlikleri duraklatma ve devam ettirme sırasıyla pause ve progress durum değişikliklerini artır. Bir bu, yüklemenin başarısız olmasına neden olur. Bu hata, dosyanın yükleme iptal edildi.

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

Yükleme İlerlemesini İzleme

Görevlerdeki başarı, başarısızlık, ilerleme veya duraklamaları yönetmek için bir görevin etkinlik akışını dinleyebilirsiniz. yükleme görevi:

Etkinlik Türü Tipik Kullanım
TaskState.running Veriler aktarılırken düzenli olarak yayınlanır ve yükleme/indirme göstergesini doldurmak için kullanılabilir.
TaskState.paused Görev her duraklatıldığında yayınlanır.
TaskState.success Görev başarıyla tamamlandığında yayınlanır.
TaskState.canceled Görev her iptal edildiğinde yayınlanır.
TaskState.error Yükleme başarısız olduğunda yayınlanır. Bu durum ağ zaman aşımları, yetkilendirme hataları veya görevi iptal etmeniz nedeniyle oluşabilir.
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;
  }
});

Hata İşleme

Yükleme sırasında hataların oluşmasının birkaç nedeni vardır: yerel dosya mevcut değil veya kullanıcının yükleme izni yok seçin. Hatalarla ilgili daha fazla bilgiyi İşleyici Hataları bölümü.

Tam Örnek

İlerleme durumu izleme ve hata giderme özelliklerini içeren tam bir yükleme örneği aşağıda gösterilmiştir:

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

Dosyalarınızı yüklediğinize göre şimdi bunları nasıl indireceğinizi öğrenelim Cloud Storage'dan edinilebilir.