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, yüklemenin
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.