Bergabunglah dengan kami secara langsung dan online di Firebase Summit pada 18 Oktober 2022. Pelajari cara Firebase dapat membantu Anda mempercepat pengembangan aplikasi, merilis aplikasi dengan percaya diri, dan meningkatkan skala dengan mudah. Daftar sekarang

Unggah file dengan Cloud Storage di Flutter

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Cloud Storage for Firebase memungkinkan Anda dengan cepat dan mudah mengunggah file ke keranjang Cloud Storage yang disediakan dan dikelola oleh Firebase.

Unggah berkas

Untuk mengunggah file ke Cloud Storage, Anda terlebih dahulu membuat referensi ke jalur lengkap file, termasuk nama file.

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

Setelah membuat referensi yang sesuai, Anda kemudian memanggil metode putFile() , putString() , atau putData() untuk mengupload file ke Cloud Storage.

Anda tidak dapat mengupload data dengan referensi ke root bucket Cloud Storage Anda. Referensi Anda harus mengarah ke URL turunan.

Unggah dari file

Untuk mengunggah file, Anda harus terlebih dahulu mendapatkan jalur absolut ke lokasi di perangkatnya. Misalnya, jika ada file dalam direktori dokumen aplikasi, gunakan paket path_provider resmi untuk menghasilkan jalur file dan meneruskannya ke 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) {
  // ...
}

Unggah dari String

Anda dapat mengunggah data sebagai string yang disandikan mentah, base64 , base64url , atau data_url menggunakan metode putString() . Misalnya, untuk mengunggah string teks yang dikodekan sebagai URL Data:

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

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

Mengunggah data mentah

Anda dapat mengunggah data yang diketik tingkat rendah dalam bentuk Uint8List untuk kasus-kasus di mana mengunggah string atau File tidak praktis. Dalam hal ini, panggil metode putData() dengan data Anda:

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

Dapatkan URL unduhan

Setelah mengunggah file, Anda bisa mendapatkan URL untuk mengunduh file dengan memanggil metode getDownloadUrl() pada Reference :

await mountainsRef.getDownloadURL();

Tambahkan Metadata File

Anda juga dapat menyertakan metadata saat mengunggah file. Metadata ini berisi properti metadata file yang khas seperti contentType (biasanya disebut sebagai tipe MIME). Metode putFile() secara otomatis menyimpulkan tipe MIME dari ekstensi File , tetapi Anda dapat mengganti tipe yang terdeteksi otomatis dengan menentukan contentType dalam metadata. Jika Anda tidak memberikan contentType dan Cloud Storage tidak dapat menyimpulkan default dari ekstensi file, Cloud Storage menggunakan application/octet-stream . Lihat Menggunakan Metadata File .

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

Kelola Unggahan

Selain memulai unggahan, Anda dapat menjeda, melanjutkan, dan membatalkan unggahan menggunakan metode pause() , resume() , dan cancel() . Jeda dan lanjutkan acara masing-masing meningkatkan pause dan perubahan status progress . Membatalkan unggahan menyebabkan unggahan gagal dengan kesalahan yang menunjukkan bahwa unggahan dibatalkan.

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

Pantau Kemajuan Unggahan

Anda dapat mendengarkan aliran peristiwa tugas untuk menangani keberhasilan, kegagalan, kemajuan, atau jeda dalam tugas unggahan Anda:

Jenis Acara Penggunaan Umum
TaskState.running Dipancarkan secara berkala saat data ditransfer dan dapat digunakan untuk mengisi indikator unggah/unduh.
TaskState.paused Dipancarkan setiap kali tugas dijeda.
TaskState.success Dipancarkan ketika tugas telah berhasil diselesaikan.
TaskState.canceled Dipancarkan setiap kali tugas dibatalkan.
TaskState.error Dipancarkan saat unggahan gagal. Ini dapat terjadi karena waktu jaringan habis, kegagalan otorisasi, atau jika Anda membatalkan tugas.
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;
  }
});

Penanganan Kesalahan

Ada beberapa alasan mengapa kesalahan dapat terjadi saat mengunggah, termasuk file lokal tidak ada, atau pengguna tidak memiliki izin untuk mengunggah file yang diinginkan. Anda dapat menemukan informasi lebih lanjut tentang kesalahan di bagian Menangani Kesalahan pada dokumen.

Contoh Lengkap

Contoh lengkap unggahan dengan pemantauan kemajuan dan penanganan kesalahan ditunjukkan di bawah ini:

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

Sekarang setelah Anda mengunggah file, mari pelajari cara mengunduhnya dari Cloud Storage.