Cloud Storage dla Firebase umożliwia szybkie i łatwe pobieranie plików z zasobnika Cloud Storage udostępnionego i zarządzanego przez Firebase.
Tworzenie referencji
Aby pobrać plik, musisz najpierw utworzyć odwołanie do niego w Cloud Storage.
Możesz utworzyć odwołanie, dodając ścieżki podrzędne do katalogu głównego zasobnika Cloud Storage. Możesz też utworzyć odwołanie 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
Po uzyskaniu referencji możesz pobierać pliki z Cloud Storage, wywołując getData()
lub getStream()
. Jeśli wolisz pobrać plik z innej biblioteki, możesz uzyskać adres URL do pobrania za pomocą getDownloadUrl()
.
Pobieranie do pamięci
Pobierz plik do usługi UInt8List
za pomocą metody getData()
. Jest to najprostszy sposób pobierania pliku, ale wymaga załadowania całej zawartości pliku do pamięci. Jeśli zażądasz pliku większego niż dostępna pamięć aplikacji, aplikacja ulegnie awarii. Aby zapobiec problemom z pamięcią, getData()
pobiera maksymalną liczbę bajtów do pobrania. Ustaw maksymalny rozmiar na taki, o którym wiesz, że Twoja aplikacja jest w stanie 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 opcji, jeśli użytkownicy chcą mieć dostęp do pliku w trybie offline lub udostępnić go w innej aplikacji. writeToFile()
zwraca DownloadTask
, którego możesz użyć do zarządzania pobieraniem i monitorowania jego stanu.
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;
}
});
Pobierz dane za pomocą adresu URL
Jeśli masz już infrastrukturę pobierania opartą na adresach URL lub chcesz po prostu udostępnić adres URL, możesz uzyskać adres URL do pobrania pliku, wywołując metodę getDownloadURL()
w przypadku odwołania do Cloud Storage.
final imageUrl =
await storageRef.child("users/me/profile.png").getDownloadURL();
Obsługa błędów
Błędy podczas pobierania mogą występować z różnych powodów, m.in. dlatego, że plik nie istnieje lub użytkownik nie ma do niego dostępu. Więcej informacji o błędach znajdziesz w sekcji Obsługa błędów w tej dokumentacji.
Pełny przykład
Pełny przykład pliku do pobrania z obsługą błędów znajdziesz poniżej:
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.