Ich arbeite daran, Bilder hochzuladen, alles funktioniert hervorragend, aber ich habe 100 Bilder und möchte alle in meinem View
anzeigen. Da ich die vollständige Liste der Bilder in einem Ordner erhalte, kann ich keine API dafür finden Arbeit.
firebase
firebase-storage
Luis Ruiz Figueroa
quelle
quelle
Antworten:
Seit Firebase SDKs für JavaScript Release 6.1 , iOS Release 6.4 und Android Release Version 18.1 verfügen alle über eine Methode zum Auflisten von Dateien.
Die Dokumentation ist bisher etwas spärlich, daher empfehle ich, Rosários Antwort für Details zu lesen.
Vorherige Antwort, da dieser Ansatz manchmal noch nützlich sein kann:
Derzeit gibt es im Firebase SDK keinen API-Aufruf zum Auflisten aller Dateien in einem Cloud Storage-Ordner innerhalb einer App. Wenn Sie solche Funktionen benötigen, sollten Sie die Metadaten der Dateien (z. B. die Download-URLs) an einem Ort speichern, an dem Sie sie auflisten können. Die Firebase Realtime Database und der Cloud Firestore sind dafür perfekt geeignet und ermöglichen es Ihnen, die URLs auch problemlos mit anderen zu teilen.
Ein gutes (aber etwas kompliziertes) Beispiel dafür finden Sie in unserer FriendlyPix- Beispiel-App. Der relevante Code für die Webversion ist hier , aber es gibt auch Versionen für iOS und Android.
quelle
Ab Mai 2019 unterstützt Version 6.1.0 des Firebase SDK für Cloud-Speicher das Auflisten aller Objekte aus einem Bucket. Sie müssen nur anrufen
listAll()
in aReference
:Bitte beachten Sie , dass Sie sich für die Verwendung dieser Funktion für Version 2 der Sicherheitsregeln anmelden müssen. Dies kann in
rules_version = '2';
der ersten Zeile Ihrer Sicherheitsregeln erfolgen:Ich würde empfehlen, die Dokumente für weitere Referenz zu überprüfen .
Gemäß Setup ist dieses Skript in Schritt 5 nicht zulässig,
Node.js
darequire("firebase/app");
es nichtfirebase.storage()
als Funktion zurückgegeben wird. Dies wird nur mit erreichtimport * as firebase from 'firebase/app';
.quelle
Seit März 2017: Mit Firebase Cloud-Funktionen und der tieferen Integration von Firebase in Google Cloud ist dies jetzt möglich.
Mit Cloud-Funktionen können Sie das Google Cloud Node-Paket verwenden, um epische Vorgänge im Cloud-Speicher auszuführen. Im Folgenden finden Sie ein Beispiel, mit dem alle Datei-URLs aus dem Cloud-Speicher in ein Array abgerufen werden. Diese Funktion wird jedes Mal ausgelöst, wenn etwas im Google Cloud-Speicher gespeichert wird.
Hinweis 1 : Dies ist eine ziemlich rechenintensive Operation, da alle Dateien in einem Bucket / Ordner durchlaufen werden müssen.
Anmerkung 2 : Ich habe dies nur als Beispiel geschrieben, ohne viel Detail in Versprechen usw. zu stecken. Nur um eine Idee zu geben.
Ich hoffe, das gibt Ihnen die allgemeine Idee. Weitere Beispiele für bessere Cloud-Funktionen finden Sie in Googles Github-Repo mit Beispielen für Cloud-Funktionen für Firebase . Überprüfen Sie auch die aus Google Cloud Knoten API - Dokumentation
quelle
.then
this.bucket .getFiles({ prefix: 'path/to/directory' }) .then((arr) => {})
Da keine Sprache aufgeführt ist, werde ich dies in Swift beantworten. Wir empfehlen dringend, Firebase Storage und die Firebase Realtime Database zusammen zu verwenden, um Listen mit Downloads zu erstellen:
Geteilt:
Hochladen:
Herunterladen:
Weitere Informationen dazu finden Sie unter Zero to App: Entwickeln mit Firebase und dem zugehörigen Quellcode .
quelle
Eine Problemumgehung kann darin bestehen, eine Datei (dh list.txt) zu erstellen, in der sich nichts befindet. In dieser Datei können Sie die benutzerdefinierten Metadaten (dh eine Map <String, String>) mit der Liste aller URLs der Datei festlegen.
Wenn Sie also alle Dateien in einem Fodler herunterladen müssen, laden Sie zuerst die Metadaten der Datei list.txt herunter, durchlaufen dann die benutzerdefinierten Daten und laden alle Dateien mit den URLs in der Map herunter.
quelle
Ich bin auch auf dieses Problem gestoßen, als ich an meinem Projekt gearbeitet habe. Ich wünschte wirklich, sie bieten eine End-API-Methode. Wie auch immer, so habe ich es gemacht: Wenn Sie ein Bild in den Firebase-Speicher hochladen, erstellen Sie ein Objekt und übergeben Sie dieses Objekt gleichzeitig an die Firebase-Datenbank. Dieses Objekt enthält die Download-URI des Bildes.
Wenn Sie später Bilder aus einem Ordner herunterladen möchten, durchlaufen Sie einfach die Dateien unter diesem Ordner. Dieser Ordner hat denselben Namen wie der "Ordner" im Firebase-Speicher, Sie können ihn jedoch beliebig benennen. Ich habe sie in einen separaten Thread gestellt.
Jetzt habe ich eine Liste von Objekten, die die URIs für jedes Bild enthalten. Ich kann damit machen, was ich will. Um sie in imageView zu laden, habe ich einen weiteren Thread erstellt.
Dies gibt eine Liste von Bitmap zurück. Wenn es fertig ist, hänge ich sie einfach in der Hauptaktivität an ImageView an. Die folgenden Methoden sind @Override, da ich Schnittstellen erstellt habe und auf die Fertigstellung in anderen Threads warte.
Beachten Sie, dass ich warten muss, bis List Image zurückgegeben wird, und dann den Thread aufrufen muss, um an List Bitmap zu arbeiten. In diesem Fall enthält Image den URI.
Hoffentlich findet es jemand hilfreich. Es wird auch in Zukunft als Gildenlinie für mich dienen.
quelle
Eine weitere Möglichkeit, das Bild mithilfe der Cloud-Funktion zur Datenbank hinzuzufügen, um jedes hochgeladene Bild zu verfolgen und in der Datenbank zu speichern.
Vollständiger Code hier: https://gist.github.com/bossly/fb03686f2cb1699c2717a0359880cf84
quelle
Für den Knoten js habe ich diesen Code verwendet
quelle
Sie können Dateien in einem Verzeichnis des Firebase-Speichers mit der Methode listAll () auflisten. Um diese Methode verwenden zu können, müssen Sie diese Version des Firebase-Speichers implementieren. 'com.google.firebase: firebase-storage: 18.1.1'
https://firebase.google.com/docs/storage/android/list-files
Beachten Sie, dass Sie die Sicherheitsregeln auf Version 2 aktualisieren.
quelle
Dies ist tatsächlich möglich, jedoch nur mit einer Google Cloud-API anstelle einer von Firebase. Dies liegt daran, dass ein Firebase-Speicher ein Google Cloud-Speicher-Bucket ist, der mit den Google Cloud-APIs leicht erreichbar ist. Sie müssen jedoch OAuth für die Authentifizierung anstelle des Firebase-Speichers verwenden .
quelle
Ich hatte das gleiche Problem, meins ist noch komplizierter.
Der Administrator lädt Audio- und PDF-Dateien in den Speicher hoch:
Audios / Staffel1, Staffel2 ... / Klasse1, Klasse 2 / .mp3 Dateien
Bücher / PDF-Dateien
Die Android-App muss die Liste der Unterordner und Dateien abrufen.
Die Lösung fängt das Upload-Ereignis im Speicher ab und erstellt mithilfe der Cloud-Funktion dieselbe Struktur im Firestore.
Schritt 1: Erstellen Sie manuell eine 'Speicher'-Sammlung und ein' Audios / Bücher'-Dokument im Firestore
Schritt 2: Cloud-Funktion einrichten
Könnte ungefähr 15 Minuten dauern: https://www.youtube.com/watch?v=DYfP-UIKxH0&list=PLl-K7zZEsYLkPZHe41m4jfAxUi0JjLgSM&index=1
Schritt 3: Catch-Upload-Ereignis mithilfe der Cloud-Funktion abfangen
Schritt 4: Rufen Sie mithilfe des Firestores eine Liste der Ordner / Dateien in der Android-App ab
Schritt 5: Download-URL abrufen
Hinweis
Wir müssen jedem Element eine "Unter" -Sammlung hinzufügen, da der Firestore das Abrufen der Sammlungsliste nicht unterstützt.
Ich habe 3 Tage gebraucht, um die Lösung herauszufinden, hoffentlich brauchen Sie höchstens 3 Stunden.
Prost.
quelle
Erweiterung der Antwort von Rosário Pereira Fernandes für eine JavaScript-Lösung:
JavaScript
als Standardsprache festgelegtFunktionen / package.json
listAll
Funktionindex.js
images.js
firebase deploy
, um Ihre Cloud-Funktion hochzuladenbuild.gradle
Kotlin-Klasse
In Bezug auf die Weiterentwicklung dieser Funktion bin ich auf einige Probleme gestoßen, die hier auftreten könnten .
quelle
Um dies mit JS zu tun
Sie können sie direkt an Ihren div-Container anhängen oder an ein Array senden. Das Folgende zeigt Ihnen, wie Sie sie an Ihre Div anhängen können.
1) Wenn Sie Ihre Bilder im Speicher speichern, erstellen Sie einen Verweis auf das Bild in Ihrer Firebase-Datenbank mit der folgenden Struktur
2) Wenn Sie Ihr Dokument laden, ziehen Sie alle Ihre Bildquellen-URLs aus der Datenbank und nicht aus dem Speicher mit dem folgenden Code
quelle
Sie können den folgenden Code verwenden. Hier lade ich das Bild in den Firebase-Speicher hoch und speichere dann die Bild-Download-URL in der Firebase-Datenbank.
Jetzt können Sie alle in der Firebase-Datenbank gespeicherten Bilder abrufen
Weitere Details finden Sie in meinem Beitrag Firebase Storage Example .
quelle
Ich hatte also ein Projekt, bei dem Assets aus dem Firebase-Speicher heruntergeladen werden mussten, also musste ich dieses Problem selbst lösen. Hier ist, wie :
1- Erstellen Sie zunächst Modelldaten
class Choice{}
. In dieser Klasse wird eine Zeichenfolgenvariable mit dem Namen image Name definiert, damit dies so ist2- Gehen Sie aus einer Datenbank / Firebase-Datenbank und codieren Sie die Bildnamen fest in die Objekte. Wenn Sie also einen Bildnamen namens Apple.png haben, erstellen Sie das Objekt, das sein soll
3- Holen Sie sich jetzt den Link für die Assets in Ihrem Firebase-Speicher, der so ähnlich sein wird
wie dieser
4- Initialisieren Sie abschließend Ihre Firebase-Speicherreferenz und beginnen Sie, die Dateien durch eine solche Schleife abzurufen
5- das war's
quelle
quelle
Ich benutze
AngularFire
und benutze das Folgende, um alle zu bekommendownloadURL
quelle
Für Android ist es am besten, FirebaseUI und Glide zu verwenden.
Sie müssen dies in Ihrem Gradle / Ihrer App hinzufügen, um die Bibliothek zu erhalten. Beachten Sie, dass Glide bereits darauf ist!
Und dann in Ihrem Code verwenden
quelle