Estoy trabajando en subir imágenes, todo funciona muy bien, pero tengo 100 imágenes y me gustaría mostrarlas todas en mi View
, ya que obtengo la lista completa de las imágenes en una carpeta, no encuentro ninguna API para esto trabajo.
firebase
firebase-storage
Luis Ruiz Figueroa
fuente
fuente
Respuestas:
Desde la versión 6.1 de Firebase SDK para JavaScript , la versión 6.4 de iOS y la versión 18.1 de Android tienen un método para enumerar archivos.
La documentación es un poco escasa hasta ahora, por lo que recomiendo consultar la respuesta de Rosário para obtener más detalles.
Respuesta anterior, ya que este enfoque todavía puede ser útil a veces:
Actualmente, no hay una llamada a la API en el SDK de Firebase para enumerar todos los archivos en una carpeta de Cloud Storage desde una aplicación. Si necesita dicha funcionalidad, debe almacenar los metadatos de los archivos (como las URL de descarga) en un lugar donde pueda enumerarlos. La base de datos en tiempo real Firebase y Nube Firestore son perfectos para esto y le permite compartir fácilmente también las direcciones URL con los demás.
Puede encontrar una buena (pero algo complicada) muestra de esto en nuestra aplicación de muestra FriendlyPix . El código relevante para la versión web está aquí , pero también hay versiones para iOS y Android.
fuente
A partir de mayo de 2019, la versión 6.1.0 del SDK de Firebase para Cloud Storage ahora admite la lista de todos los objetos de un depósito. Simplemente necesita llamar
listAll()
aReference
:Tenga en cuenta que para usar esta función, debe optar por la versión 2 de las Reglas de seguridad , lo que se puede hacer haciendo
rules_version = '2';
la primera línea de sus reglas de seguridad:Recomiendo consultar los documentos para obtener más referencias.
Además, de acuerdo con la configuración , en el Paso 5, este script no está permitido
Node.js
yarequire("firebase/app");
que no regresaráfirebase.storage()
como una función. Esto solo se logra usandoimport * as firebase from 'firebase/app';
.fuente
Desde marzo de 2017: con la incorporación de Firebase Cloud Functions y la integración más profunda de Firebase con Google Cloud, esto ahora es posible.
Con Cloud Functions puedes usar el paquete Google Cloud Node para hacer épicas operaciones en Cloud Storage. A continuación, se muestra un ejemplo que obtiene todas las URL de archivo en una matriz desde Cloud Storage. Esta función se activará cada vez que se guarde algo en el almacenamiento en la nube de Google.
Nota 1 : Esta es una operación bastante costosa desde el punto de vista computacional, ya que tiene que recorrer todos los archivos en un depósito / carpeta.
Nota 2 : escribí esto solo como un ejemplo, sin poner muchos detalles en las promesas, etc. Solo para dar una idea.
Espero que esto les dé una idea general. Para obtener mejores ejemplos de funciones en la nube, consulte el repositorio de Github de Google lleno de muestras de Cloud Functions para Firebase . Consulte también la documentación de la API de Google Cloud Node
fuente
.then
como esta:this.bucket .getFiles({ prefix: 'path/to/directory' }) .then((arr) => {})
Como no hay ningún idioma en la lista, responderé esto en Swift. Recomendamos encarecidamente usar Firebase Storage y Firebase Realtime Database juntos para lograr listas de descargas:
Compartido:
Subir:
Descargar:
Para obtener más información, consulte Zero to App: Develop with Firebase , y su código fuente asociado , para ver un ejemplo práctico de cómo hacer esto.
fuente
Una solución puede ser crear un archivo (es decir, list.txt) sin nada dentro, en este archivo puede configurar los metadatos personalizados (es decir, un Mapa <Cadena, Cadena>) con la lista de todas las URL del archivo.
Entonces, si necesita descargar todos los archivos en un fodler, primero descargue los metadatos del archivo list.txt, luego recorra los datos personalizados y descargue todos los archivos con las URL en el mapa.
fuente
También encontré este problema cuando estaba trabajando en mi proyecto. Realmente deseo que proporcionen un método de API final. De todos modos, así es como lo hice: cuando esté cargando una imagen en el almacenamiento de Firebase, cree un Objeto y páselo a la base de datos de Firebase al mismo tiempo. Este objeto contiene el URI de descarga de la imagen.
Más tarde, cuando desee descargar imágenes de una carpeta, simplemente recorra los archivos de esa carpeta. Esta carpeta tiene el mismo nombre que la "carpeta" en el almacenamiento de Firebase, pero puede asignarles el nombre que desee. Los pongo en hilo separado.
Ahora que tengo una lista de objetos que contienen los URI de cada imagen, puedo hacer lo que quiera con ellos. Para cargarlos en imageView, creé otro hilo.
Esto devuelve una lista de Bitmap, cuando termina, simplemente los adjunto a ImageView en la actividad principal. Los métodos siguientes son @Override porque he creado interfaces y escucho la finalización en otros hilos.
Tenga en cuenta que primero tengo que esperar a que se devuelva List Image y luego llamar al hilo para que funcione en List Bitmap. En este caso, Image contiene el URI.
Ojalá alguien lo encuentre útil. También servirá como una línea de gremio para mí en el futuro.
fuente
Una forma más de agregar la imagen a la base de datos mediante la función de nube para realizar un seguimiento de cada imagen cargada y almacenarla en la base de datos.
Código completo aquí: https://gist.github.com/bossly/fb03686f2cb1699c2717a0359880cf84
fuente
Para el nodo js, usé este código
fuente
Puede enumerar archivos en un directorio de almacenamiento de base de fuego mediante el método listAll (). Para utilizar este método, debe implementar esta versión de firebase storage. 'com.google.firebase: firebase-storage: 18.1.1'
https://firebase.google.com/docs/storage/android/list-files
Tenga en cuenta que actualice las Reglas de seguridad a la versión 2.
fuente
En realidad, esto es posible, pero solo con una API de Google Cloud en lugar de una de Firebase. Esto se debe a que un almacenamiento de Firebase es un depósito de almacenamiento de Google Cloud al que se puede acceder fácilmente con las API de Google Cloud, sin embargo, debe usar OAuth para la autenticación en lugar del de Firebase.
fuente
Enfrenté el mismo problema, el mío es aún más complicado.
El administrador cargará archivos de audio y pdf en el almacenamiento:
audios / season1, season2 ... / class1, class 2 / archivos .mp3
libros / archivos .pdf
La aplicación de Android necesita obtener la lista de subcarpetas y archivos.
La solución es capturar el evento de carga en el almacenamiento y crear la misma estructura en firestore utilizando la función de nube.
Paso 1: Cree manualmente una colección de 'almacenamiento' y un documento de 'audios / libros' en firestore
Paso 2: configurar la función de nube
Puede tardar unos 15 minutos: https://www.youtube.com/watch?v=DYfP-UIKxH0&list=PLl-K7zZEsYLkPZHe41m4jfAxUi0JjLgSM&index=1
Paso 3: captura el evento de carga usando la función de nube
Paso 4: recupere la lista de carpetas / archivos en la aplicación de Android usando firestore
Paso 5: obtener la URL de descarga
Nota
Tenemos que poner una colección "sub" a cada elemento ya que firestore no admite recuperar la lista de colecciones.
Me tomó 3 días encontrar la solución, con suerte te llevará 3 horas como máximo.
Salud.
fuente
Ampliando la respuesta de Rosário Pereira Fernandes , para una solución de JavaScript:
JavaScript
como idioma predeterminadofunciones / package.json
listAll
funciónindex.js
images.js
firebase deploy
para cargar su función en la nubebuild.gradle
clase kotlin
Con respecto al desarrollo posterior de esta función, encontré algunos problemas que podrían encontrarse aquí .
fuente
Para hacer esto con JS
Puede agregarlos directamente a su contenedor div, o puede enviarlos a una matriz. A continuación, se muestra cómo agregarlos a su div.
1) Cuando almacene sus imágenes en el almacenamiento, cree una referencia a la imagen en su base de datos de base de fuego con la siguiente estructura
2) Cuando cargue su documento, extraiga todas las URL de origen de la imagen de la base de datos en lugar del almacenamiento con el siguiente código
fuente
Puede utilizar el siguiente código. Aquí estoy cargando la imagen en el almacenamiento de Firebase y luego estoy almacenando la URL de descarga de la imagen en la base de datos de Firebase.
Ahora, para obtener todas las imágenes almacenadas en la base de datos de firebase, puede usar
Para obtener más detalles, puede ver mi publicación Ejemplo de almacenamiento de Firebase .
fuente
Entonces, tenía un proyecto que requería descargar activos del almacenamiento de base de fuego, así que tuve que resolver este problema yo mismo. Aquí es cómo :
1- Primero, haga un modelo de datos por ejemplo
class Choice{}
, en esa clase define una variable de cadena llamada Nombre de imagen para que sea así2- desde una base de datos / base de datos de fuego, vaya y codifique los nombres de las imágenes a los objetos, por lo que si tiene un nombre de imagen llamado Apple.png, cree el objeto que se
3- Ahora, obtenga el enlace para los activos en su almacenamiento de base de fuego, que será algo así
como éste
4- finalmente, inicialice su referencia de almacenamiento de base de fuego y comience a obtener los archivos mediante un bucle como ese
5- eso es todo
fuente
fuente
Estoy usando
AngularFire
y utilizo lo siguiente para obtener todos losdownloadURL
fuente
Para Android, la mejor práctica es usar FirebaseUI y Glide.
Debe agregar eso en su gradle / aplicación para obtener la biblioteca. ¡Tenga en cuenta que ya tiene Glide!
Y luego en tu código usa
fuente