Pracuję nad wgrywaniem obrazków, wszystko działa świetnie, ale mam 100 zdjęć i chciałbym je wszystkie pokazać w moim View
, skoro dostaję pełną listę zdjęć w folderze, nie mogę znaleźć do tego żadnego API praca.
firebase
firebase-storage
Luis Ruiz Figueroa
źródło
źródło
Odpowiedzi:
Od wersji 6.1 Firebase SDK dla języka JavaScript , wersji 6.4 systemu iOS i wersji 18.1 systemu Android, wszystkie mają metodę wyświetlania plików.
Jak dotąd dokumentacja jest nieco uboga, więc polecam sprawdzić odpowiedź Rosário, aby poznać szczegóły.
Poprzednia odpowiedź, ponieważ to podejście może być czasami przydatne:
Obecnie w pakiecie Firebase SDK nie ma wywołania interfejsu API w celu wyświetlenia listy wszystkich plików w folderze Cloud Storage z poziomu aplikacji. Jeśli potrzebujesz takiej funkcjonalności, powinieneś przechowywać metadane plików (takie jak adresy URL pobierania) w miejscu, w którym możesz je wyświetlić. Database Firebase Realtime i Chmura Firestore są idealne do tego i pozwala łatwo udostępniać adresy URL z innymi.
Możesz znaleźć dobrą (ale nieco zaangażowaną) próbkę tego w naszej przykładowej aplikacji FriendlyPix . Odpowiedni kod dla wersji internetowej jest tutaj , ale są też wersje na iOS i Android.
źródło
Od maja 2019 r. Wersja 6.1.0 pakietu SDK Firebase dla Cloud Storage obsługuje teraz wyświetlanie listy wszystkich obiektów z zasobnika. Wystarczy zadzwonić
listAll()
pod numerReference
:Proszę pamiętać, że aby korzystać z tej funkcji, należy zgłosić się do wersji 2 zasad bezpieczeństwa , które mogą być wykonywane przez co
rules_version = '2';
pierwszą linię swoich zasad bezpieczeństwa:Zalecam sprawdzenie dokumentacji w celu uzyskania dalszych informacji.
Ponadto, zgodnie z konfiguracją , w kroku 5 ten skrypt nie jest dozwolony,
Node.js
ponieważrequire("firebase/app");
nie wrócifirebase.storage()
jako funkcja. Osiąga się to tylko za pomocąimport * as firebase from 'firebase/app';
.źródło
Od marca 2017 r .: z dodatkiem Firebase Cloud Functions i głębszej integracji Firebase z Google Cloud jest to teraz możliwe.
Dzięki Cloud Functions możesz używać pakietu Google Cloud Node do robienia niesamowitych rzeczy operacji w Cloud Storage. Poniżej znajduje się przykład, który pobiera wszystkie adresy URL plików do tablicy z Cloud Storage. Ta funkcja będzie uruchamiana za każdym razem, gdy coś zostanie zapisane w pamięci Google w chmurze.
Notatka 1 : Jest to operacja dość kosztowna obliczeniowo, ponieważ wymaga cyklicznego przeglądania wszystkich plików w zasobniku / folderze.
Uwaga 2 : Napisałem to jako przykład, nie zwracając zbytniej uwagi na obietnice itp. Tylko po to, aby dać pomysł.
Mam nadzieję, że to da ci ogólny pomysł. Aby uzyskać lepsze przykłady funkcji w chmurze, sprawdź repozytorium Google Github pełne przykładów Cloud Functions dla Firebase . Zapoznaj się również z dokumentacją Google Cloud Node API
źródło
.then
:this.bucket .getFiles({ prefix: 'path/to/directory' }) .then((arr) => {})
Ponieważ na liście nie ma języka, odpowiem na to w języku Swift. Zdecydowanie zalecamy jednoczesne używanie Firebase Storage i Firebase Realtime Database do tworzenia list pobrań:
Udostępnione:
Przekazać plik:
Pobieranie:
Aby uzyskać więcej informacji, zobacz Zero to App: Develop with Firebase i powiązany z nim kod źródłowy , aby zapoznać się z praktycznym przykładem, jak to zrobić.
źródło
Rozwiązaniem może być utworzenie pliku (np. List.txt) bez niczego w środku. W tym pliku można ustawić niestandardowe metadane (czyli Map <String, String>) z listą adresów URL wszystkich plików.
Więc jeśli chcesz pobrać wszystkie pliki w programie Fodler, najpierw pobierz metadane pliku list.txt, a następnie przejdziesz przez dane niestandardowe i pobierzesz wszystkie pliki z adresami URL w mapie.
źródło
Z tym problemem spotkałem się również podczas pracy nad swoim projektem. Naprawdę chciałbym, aby dostarczali metodę końcowego api. W każdym razie tak to zrobiłem: podczas przesyłania obrazu do magazynu Firebase utwórz obiekt i jednocześnie przekaż go do bazy danych Firebase. Ten obiekt zawiera identyfikator URI pobierania obrazu.
Później, gdy chcesz pobrać obrazy z folderu, po prostu przeglądaj pliki w tym folderze. Ten folder ma taką samą nazwę jak „folder” w pamięci Firebase, ale możesz nadawać im dowolne nazwy. Umieściłem je w osobnym wątku.
Teraz mam listę obiektów zawierających identyfikatory URI do każdego obrazu, mogę zrobić z nimi, co chcę. Aby załadować je do imageView, utworzyłem kolejny wątek.
To zwraca listę bitmap, po zakończeniu po prostu dołączam je do ImageView w głównym działaniu. Poniższe metody to @Override, ponieważ mam utworzone interfejsy i nasłuchuję zakończenia w innych wątkach.
Zauważ, że najpierw muszę poczekać na zwrócenie obrazu listy, a następnie wywołać wątek, aby działał na mapie bitowej listy. W tym przypadku Image zawiera identyfikator URI.
Mam nadzieję, że ktoś uzna to za pomocne. W przyszłości będzie również służyć jako linia gildii.
źródło
Jeszcze jeden sposób dodania obrazu do bazy danych przy użyciu funkcji chmury do śledzenia każdego przesłanego obrazu i przechowywania go w bazie danych.
Pełny kod tutaj: https://gist.github.com/bossly/fb03686f2cb1699c2717a0359880cf84
źródło
W przypadku węzła js użyłem tego kodu
źródło
Możesz wyświetlić listę plików w katalogu magazynu Firebase za pomocą metody listAll (). Aby skorzystać z tej metody, musisz zaimplementować tę wersję magazynu Firebase. „com.google.firebase: firebase-storage: 18.1.1”
https://firebase.google.com/docs/storage/android/list-files
Pamiętaj, że zaktualizuj reguły bezpieczeństwa do wersji 2.
źródło
W rzeczywistości jest to możliwe, ale tylko z Google Cloud API zamiast jednego z Firebase. Dzieje się tak, ponieważ Firebase Storage to zasobnik Google Cloud Storage, do którego można łatwo dotrzeć za pomocą interfejsów API Google Cloud, jednak do uwierzytelniania musisz używać OAuth zamiast Firebase.
źródło
Zmierzyłem się z tym samym problemem, mój jest jeszcze bardziej skomplikowany.
Administrator prześle pliki audio i pdf do pamięci:
audios / season1, season2 ... / class1, class 2 / .mp3 files
książki / pliki .pdf
Aplikacja na Androida musi pobrać listę podfolderów i plików.
Rozwiązaniem jest przechwytywanie zdarzenia uploadu w magazynie i utworzenie tej samej struktury w Firestore przy użyciu funkcji chmury.
Krok 1: Utwórz ręcznie kolekcję „przechowywanie” i dokument „audio / książki” w Firestore
Krok 2: Konfiguracja funkcji chmury
Może zająć około 15 minut: https://www.youtube.com/watch?v=DYfP-UIKxH0&list=PLl-K7zZEsYLkPZHe41m4jfAxUi0JjLgSM&index=1
Krok 3: Złap zdarzenie przesyłania za pomocą funkcji chmury
Krok 4: Pobierz listę folderów / plików w aplikacji na Androida za pomocą Firestore
Krok 5: Uzyskaj adres URL pobierania
Uwaga
Musimy umieścić kolekcję „pod” w każdym elemencie, ponieważ firestore nie obsługuje pobierania listy kolekcji.
Znalezienie rozwiązania zajęło mi 3 dni, mam nadzieję, że zajmie ci to najwyżej 3 godziny.
Twoje zdrowie.
źródło
Poszerzenie odpowiedzi Rosário Pereiry Fernandesa o rozwiązanie JavaScript:
JavaScript
jako język domyślnyfunctions / package.json
listAll
funkcjiindex.js
images.js
firebase deploy
aby przesłać funkcję chmurybuild.gradle
klasa kotlin
Jeśli chodzi o dalszy rozwój tej funkcji, napotkałem kilka problemów, które mogły się tutaj znaleźć .
źródło
Aby to zrobić z JS
Możesz dołączyć je bezpośrednio do kontenera div lub wypchnąć do tablicy. Poniżej pokazano, jak dołączyć je do swojego div.
1) Podczas przechowywania obrazów w pamięci utwórz odniesienie do obrazu w bazie danych firebase o następującej strukturze
2) Po załadowaniu dokumentu pobierz wszystkie adresy URL źródła obrazu z bazy danych, a nie z magazynu z następującym kodem
źródło
Możesz użyć następującego kodu. Tutaj przesyłam obraz do magazynu Firebase, a następnie przechowuję adres URL pobierania obrazu w bazie danych Firebase.
Teraz możesz pobrać wszystkie obrazy przechowywane w bazie danych Firebase, których możesz użyć
Aby uzyskać więcej informacji, zobacz mój post Przykład pamięci Firebase .
źródło
Miałem więc projekt, który wymagał pobrania zasobów z magazynu Firebase, więc musiałem sam rozwiązać ten problem. Oto jak :
1- Najpierw utwórz dane modelu, na przykład
class Choice{}
, W tej klasie zdefiniowano zmienną typu String o nazwie Nazwa obrazu, więc tak będzie2- z bazy danych / bazy danych firebase, przejdź i zakoduj na stałe nazwy obrazów do obiektów, więc jeśli masz nazwę obrazu o nazwie Apple.png, utwórz obiekt, który ma być
3- Teraz uzyskaj link do zasobów w pamięci Firebase, który będzie podobny do tego
jak ten
4- Na koniec zainicjuj odwołanie do magazynu Firebase i zacznij pobierać pliki w takiej pętli
5- to wszystko
źródło
źródło
Używam
AngularFire
i używam następujących, aby uzyskać wszystkie plikidownloadURL
źródło
W przypadku Androida najlepszą praktyką jest użycie FirebaseUI i Glide.
Musisz dodać to w swoim gradle / aplikacji, aby uzyskać bibliotekę. Zwróć uwagę, że ma już na sobie Glide!
A następnie w swoim kodzie użyj
źródło