Firebase Storage Jak przechowywać i odzyskiwać obrazy [zamknięte]

268

Jak przechowywać i wyświetlać obrazy w Firebase?

dogger
źródło
1
To jest fajne, jeśli przechowuję obrazy za pomocą FireBase, mogę użyć loginów
FireBase
6
Od wczoraj Firebase wydało nową funkcję o nazwie Firebase Storage (firebase.google.com/docs/storage), która umożliwia przesyłanie i pobieranie dowolnych plików (obrazów, wideo, audio itp.). Jest wspierany przez Google Cloud Storage (cloud.google.com/storage) w skali petabajtów i konkurencyjnej cenie. Zdecydowanie powinieneś to sprawdzić :)
Mike McDonald
16
Użytkownicy uważają, że jest użyteczny, dlaczego go zamknął?
Amr Lotfy,
7
@TinyGiant To nie jest prośba o rekomendację, więc dlaczego miałaby być zamknięta jako taka? Pyta o funkcję usługi oprogramowania - całkowicie na temat.
2
Nienawidzę przedwcześnie zamkniętych komentarzy. proste pytania nie powinny być zamknięte na miłość boską!
Jeryl Cook

Odpowiedzi:

277

Aktualizacja (20160519) : Firebase właśnie wydała nową funkcję o nazwie Firebase Storage . Umożliwia to przesyłanie zdjęć i innych danych innych niż JSON do dedykowanej usługi pamięci masowej. Zdecydowanie zalecamy użycie tego do przechowywania obrazów, zamiast przechowywania ich jako danych zakodowanych w standardzie base64 w bazie danych JSON.

Z pewnością możesz! W zależności od wielkości twoich zdjęć masz kilka opcji:

1. W przypadku mniejszych zdjęć (poniżej 10 MB)

Mamy przykładowy projekt, który robi to tutaj: https://github.com/firebase/firepano

Ogólnym podejściem jest ładowanie pliku lokalnie (przy użyciu FileReadera), dzięki czemu można go przechowywać w Firebase, tak jak inne dane. Ponieważ obrazy są plikami binarnymi, będziesz chciał pobrać zawartość zakodowaną w standardzie base64, abyś mógł zapisać ją jako ciąg. Lub nawet wygodniej, możesz przechowywać go jako dane: URL który jest następnie gotowy do umieszczenia jako src znacznika img (tak robi przykład)!

2. Dla większych zdjęć

Firebase ma limit 10 MB (danych łańcuchowych zakodowanych w utf8). Jeśli twój obraz jest większy, musisz podzielić go na 10 MB fragmentów. Masz rację, że Firebase jest bardziej zoptymalizowany dla małych łańcuchów, które często się zmieniają, zamiast łańcuchów o wielkości wielu megabajtów. Jeśli masz dużo dużych danych statycznych, zdecydowanie polecam S3 lub CDN.

Michael Lehenbauer
źródło
2
To cudownie. Czy kiedykolwiek napotkałeś jakieś ograniczenie rozmiaru pliku? Nie sądzę, aby Firebase powstał z myślą o łańcuchach
wielobajtowych
8
Firebase ma limit 10 MB (danych łańcuchowych zakodowanych w utf8). Jeśli twój obraz jest większy, musisz podzielić go na 10 MB fragmentów. Masz rację, że Firebase jest bardziej zoptymalizowany dla małych łańcuchów, które często się zmieniają, zamiast łańcuchów o wielkości wielu megabajtów. Jeśli masz dużo dużych danych statycznych, zdecydowanie polecam S3 lub CDN.
Michael Lehenbauer
14
Firebase naprawdę musi dodać większą pamięć do swojego systemu hostingowego lub instancji s3 z apis wbudowanymi w ich biblioteki.
The_Brink
9
@The_Brink Dziękujemy za opinię. To zdecydowanie na naszym radarze!
Michael Lehenbauer,
4
@ezain Zgadza się. Prawdopodobnie nie poleciłbym tego podejścia w przypadku dużych witryn produkcyjnych (naprawdę potrzebujesz usługi wyświetlania obrazów wspieranej przez CDN), ale jest to łatwe i „wystarczająco dobre” do dużego wykorzystania.
Michael Lehenbauer,
25

Tak, możesz przechowywać i wyświetlać obrazy w Firebase. Możesz użyć narzędzia do pobierania plików, aby uzyskać plik obrazu. Następnie możesz hostować obraz, jak chcesz, wolę Amazon s3. Po hostowaniu obrazu można go wyświetlić przy użyciu adresu URL wygenerowanego dla obrazu.

Mam nadzieję że to pomoże.

użytkownik15163
źródło
3
Sprawdź zaktualizowane dokumenty firbase dotyczące tego: firebase.google.com/docs/storage/#key_functions
Lukas Liesis
Jeśli zamierzasz przechowywać obraz w amazonie, dlaczego nie zapisać go w Firebase Storage ?
Ojonugwa Jude Ochalifu
19

Sam skończyłem z przechowywaniem obrazów w formacie base64. Tłumaczę je na podstawie ich wartości base64, gdy są wywoływane z bazy ogniowej.

Grendel2501
źródło
1
Jedynym problemem związanym z tym podejściem jest to, że gdy obrazy są duże, przenoszenie ich między działaniami powoduje spowolnienie aplikacji, aw niektórych przypadkach awarię
Ojonugwa Jude Ochalifu
10

Możesz także skorzystać z usługi o nazwie, Filepickerktóra będzie przechowywać twój obraz na swoich serwerach, a Filepicker, który nazywa się teraz Filestack, dostarczy Ci adres URL obrazu. Możesz zapisać adres URL do Firebase.

Felice
źródło
widziałem tę usługę z twojego komentarza, próbowałem, ale nie bardzo się z tego cieszyłem.
bpolat,
3

Jest kilka sposobów, aby to zrobić. Najpierw zrobiłem tak, jak zrobił to Grendal2501. Zrobiłem to podobnie do user15163, możesz zapisać adres URL obrazu w bazie firebase i hostować obraz na hoście firebase lub Amazon S3;

Jakob Hartman
źródło
Błąd 403 podczas próby wstawienia i renderowania obrazów - problemy z uprawnieniami do obrazów po przesłaniu - wszelkie informacje na temat konfiguracji przesyłania. Próbowałem użyć acl: „public-read” - ale potem przesyłanie kończy się niepowodzeniem - z 403. Wszelkie dokumenty polityki informacji i zasady segmentów, które mogłyby pomóc - byłyby świetne. AWS - dokumentacja jest trudna i nie ma informacji o debugowaniu z błędem innym niż odmowa dostępu.
jamie
2
Zadaj to jako kolejne pytanie
Jakob Hartman,
niezły pomysł :) zrobione - chociaż stos może być inny - jeśli jest jakaś zachęta, którą możesz mi dać - byłby mile widziany. Debugowanie błędów AWS S3 jest bardzo frustrujące - przynajmniej do tej pory. stackoverflow.com/questions/31998827/...
jamie
2

Używanie ciągu Base64 w JSON będzie bardzo ciężkie. Parser musi wykonać bardzo ciężkie podnoszenie. Obecnie Fresco obsługuje tylko podstawowe obsługuje Base64. Lepiej umieść coś na Amazon Cloud lub Firebase Cloud. I uzyskaj obraz jako adres URL. Abyś mógł używać Picassa lub Glide'a do buforowania.

Astma
źródło