Cloud Storage for Firebase, Firebase tarafından sağlanan ve yönetilen bir Cloud Storage paketine hızlı ve kolay bir şekilde dosya yüklemenize olanak tanır.
Dosya Yükle
Bir dosyayı Cloud Storage'a yüklemek için önce dosya adı dahil olmak üzere dosyanın tam yoluna bir referans oluşturmanız gerekir.
// 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ı Cloud Storage'a yüklemek için putFile()
, putString()
veya putData()
yöntemini çağırırsınız.
Cloud Storage paketinizin köküne referans veren verileri yükleyemezsiniz. Referansınız bir alt URL'ye yönlendirmelidir.
Dosyadan yükle
Bir dosya yüklemek için önce dosyanın cihaz üzerindeki konumunun mutlak yolunu öğrenmeniz gerekir. Örneğin, bir dosya uygulamanın dokümanlar dizininde varsa dosya yolu oluşturmak ve putFile()
hizmetine iletmek için resmi path_provider
paketini kullanın:
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, putString()
yöntemini kullanarak ham, base64
, base64url
veya data_url
kodlamalı dize olarak yükleyebilirsiniz. Örneğin, Veri URL'si olarak kodlanmış bir metin dizesini yüklemek için:
String dataUrl = 'data:text/plain;base64,SGVsbG8sIFdvcmxkIQ==';
try {
await mountainsRef.putString(dataUrl, format: PutStringFormat.dataUrl);
} on FirebaseException catch (e) {
// ...
}
Ham verileri yükleme
Dize veya File
yüklemenin pratik olmadığı durumlarda, daha düşük düzeyde yazılmış verileri Uint8List
biçiminde yükleyebilirsiniz. Bu durumda, verilerinizle birlikte 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
üzerinde getDownloadUrl()
yöntemini çağırarak dosyayı indirebileceğiniz bir URL alabilirsiniz:
await mountainsRef.getDownloadURL();
Dosya Meta Verileri Ekleme
Dosya yüklerken meta verileri de ekleyebilirsiniz.
Bu meta veriler, contentType
(genellikle MIME türü) gibi tipik dosya meta verisi özelliklerini içerir. putFile()
yöntemi, MIME türünü File
uzantısından otomatik olarak tahmin eder ancak meta verilerde contentType
belirterek otomatik olarak algılanan türü geçersiz kılabilirsiniz. contentType
sağlamazsanız ve Cloud Storage, dosya uzantısından bir varsayılan çıkaramazsa Cloud Storage application/octet-stream
kullanır. 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 pause()
, resume()
ve cancel()
yöntemlerini kullanarak yüklemeleri duraklatabilir, devam ettirebilir ve iptal edebilirsiniz. Etkinlikleri duraklatma ve devam ettirme, sırasıyla pause
ve progress
durum değişikliklerini yükseltir. Yükleme işlemi iptal edildiğinde, yüklemenin iptal edildiğini belirten bir hata mesajı gösterilir.
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
Yükleme görevinizdeki başarı, başarısızlık, ilerleme veya duraklamaları yönetmek için bir görevin etkinlik akışını dinleyebilirsiniz:
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, yerel dosyanın mevcut olmaması veya kullanıcının istenen dosyayı yükleme izninin olmaması gibi çeşitli nedenler vardır. Hatalar hakkında daha fazla bilgiyi belgelerin İşleyici Hataları bölümünde bulabilirsiniz.
Tam Örnek
İlerleme durumu izleme ve hata giderme özellikli bir yükleme örneği aşağıda verilmiş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ı Cloud Storage'dan indirmeyi öğrenelim.