Cloud Storage dla Firebase umożliwia szybkie i łatwe pobieranie plików z zasobnika Cloud Storage udostępnianego i zarządzanego przez Firebase.
Tworzenie referencji
Aby pobrać plik, najpierw utwórz referencję Cloud Storage do pliku, który chcesz pobrać.
Referencję możesz utworzyć, dodając ścieżki podrzędne do katalogu głównego zasobnika Cloud Storage, lub możesz utworzyć referencję z istniejącego adresu URL gs:// lub https:// odwołującego się do obiektu w Cloud Storage.
// 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");
Pobieranie plików
Gdy masz już referencję, możesz pobierać pliki z Cloud Storage, wywołując metodę getData(). Jeśli wolisz pobrać plik za pomocą innej biblioteki, możesz uzyskać adres URL pobierania za pomocą metody getDownloadUrl().
Pobieranie do pamięci
Pobierz plik do UInt8List za pomocą metody getData(). Jest to najprostszy sposób pobierania pliku, ale wymaga wczytania całej zawartości pliku do pamięci. Jeśli poprosisz o plik większy niż dostępna pamięć aplikacji, aplikacja ulegnie awarii. Aby zapobiec problemom z pamięcią, metoda getData() pobiera maksymalną liczbę bajtów. Ustaw maksymalny rozmiar na wartość, którą Twoja aplikacja może obsłużyć, lub użyj innej metody pobierania.
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.
}
Pobieranie do pliku lokalnego
Metoda writeToFile() pobiera plik bezpośrednio na urządzenie lokalne. Użyj tej metody, jeśli użytkownicy mają mieć dostęp do pliku w trybie offline lub udostępniać go w innej aplikacji. Metoda writeToFile() zwraca DownloadTask, za pomocą którego możesz zarządzać pobieraniem i monitorować jego stan.
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;
}
});
Pobieranie danych za pomocą adresu URL
Jeśli masz już infrastrukturę pobierania opartą na adresach URL lub po prostu chcesz udostępnić adres URL, możesz uzyskać adres URL pobierania pliku, wywołując metodę getDownloadURL() na referencji Cloud Storage.
final imageUrl =
await storageRef.child("users/me/profile.png").getDownloadURL();
Obsługa błędów
Błędy podczas pobierania mogą wystąpić z różnych powodów, m.in. z powodu braku pliku lub braku uprawnień użytkownika do dostępu do żądanego pliku. Więcej informacji o błędach znajdziesz w sekcji Obsługa błędów w dokumentacji.
Pełny przykład
Poniżej znajdziesz pełny przykład pobierania z obsługą błędów:
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;
}
});
Możesz też pobierać i aktualizować metadane plików przechowywanych w Cloud Storage.