Firebase Storage Cómo almacenar y recuperar imágenes [cerrado]

269

¿Cómo almacenar y ver imágenes en firebase?

dogger
fuente
1
Esto es genial, si almaceno imágenes usando firebase, puedo usar los inicios de sesión de firebase por seguridad
mrwaim
66
A partir de ayer, Firebase lanzó una nueva función, llamada Firebase Storage (firebase.google.com/docs/storage), que le permite cargar y descargar archivos arbitrarios (imágenes, video, audio, etc.). Está respaldado por Google Cloud Storage (cloud.google.com/storage) para escalas de petabytes y precios competitivos. Definitivamente deberías ver esto :)
Mike McDonald
16
Los usuarios lo encuentran útil, ¿por qué lo cerraron?
Amr Lotfy
77
@TinyGiant Esto no pide una recomendación, entonces, ¿por qué se cerraría como tal? Se trata de una característica de un servicio de software, completamente sobre el tema.
2
Odio los comentarios cerrados prematuros. ¡Las preguntas directas no deberían cerrarse por el amor de Dios!
Jeryl Cook

Respuestas:

277

Actualización (20160519) : Firebase acaba de lanzar una nueva característica llamada Firebase Storage . Esto le permite cargar imágenes y otros datos que no sean JSON a un servicio de almacenamiento dedicado. Recomendamos encarecidamente que utilice esto para almacenar imágenes, en lugar de almacenarlas como datos codificados en base64 en la base de datos JSON.

¡Ciertamente puedes! Dependiendo de qué tan grandes sean sus imágenes, tiene un par de opciones:

1. Para imágenes más pequeñas (menos de 10 mb)

Tenemos un proyecto de ejemplo que hace eso aquí: https://github.com/firebase/firepano

El enfoque general es cargar el archivo localmente (usando FileReader) para que luego pueda almacenarlo en Firebase como lo haría con cualquier otro dato. Como las imágenes son archivos binarios, querrás obtener el contenido codificado en base64 para que puedas almacenarlo como una cadena. O incluso más conveniente, puede almacenarlo como un dato: ¡url que luego está lista para ingresar como el src de una etiqueta img (esto es lo que hace el ejemplo)!

2. Para imágenes más grandes

Firebase tiene un límite de 10 mb (de datos de cadena codificados en utf8). Si su imagen es más grande, tendrá que dividirla en trozos de 10 MB. Sin embargo, tienes razón en que Firebase está más optimizado para cadenas pequeñas que cambian con frecuencia en lugar de cadenas de varios megabytes. Si tiene muchos datos estáticos grandes, definitivamente recomendaría S3 o un CDN.

Michael Lehenbauer
fuente
2
Eso es genial. ¿Alguna vez te topaste con alguna limitación de tamaño de archivo? No creo que Firebase se haya hecho con cadenas de varios megabytes en mente ...
MasterScrat
8
Firebase tiene un límite de 10 mb (de datos de cadena codificados en utf8). Si su imagen es más grande, tendrá que dividirla en trozos de 10 MB. Sin embargo, tiene razón en que Firebase está más optimizado para cadenas pequeñas que cambian con frecuencia en lugar de cadenas de varios megabytes. Si tiene muchos datos estáticos grandes, definitivamente recomendaría S3 o un CDN.
Michael Lehenbauer
14
Firebase realmente necesita agregar almacenamiento más grande a su sistema de alojamiento, o una instancia de s3 con apis integrados en sus bibliotecas.
The_Brink
9
@The_Brink Gracias por los comentarios. ¡Esto definitivamente está en nuestro radar!
Michael Lehenbauer
44
@ezain Eso es correcto. Probablemente no recomendaría este enfoque para grandes sitios de producción (realmente desea un servicio de servicio de imágenes respaldado por CDN), pero es fácil y "lo suficientemente bueno" para una gran cantidad de uso.
Michael Lehenbauer
25

Sí, puedes almacenar y ver imágenes en Firebase. Puede usar un selector de archivos para obtener el archivo de imagen. Entonces puedes alojar la imagen como quieras, prefiero Amazon s3. Una vez que la imagen está alojada, puede mostrar la imagen utilizando la URL generada para la imagen.

Espero que esto ayude.

usuario15163
fuente
3
Vea los documentos actualizados de firbase para esto: firebase.google.com/docs/storage/#key_functions
Lukas Liesis
Si va a alojar la imagen en Amazon, ¿por qué no guardarla en Firebase Storage ?
Ojonugwa Jude Ochalifu
19

Terminé almacenando las imágenes en formato base64 yo mismo. Los traduzco de su valor base64 cuando vuelvo a llamar desde firebase.

Grendel2501
fuente
1
El único problema con este enfoque es que cuando las imágenes son grandes, moviéndolos a través de actividades hace que la aplicación lenta y en algunos casos de choque
Ojonugwa Jude Ochalifu
10

También puede usar un servicio llamado Filepickerque almacenará su imagen en sus servidores y Filepicker, que ahora se llama Filestack, le proporcionará una URL de la imagen. Puede almacenar la URL en Firebase.

Felice
fuente
Vi este servicio por su comentario que probé pero no estoy muy contento.
bpolat
3

Hay un par de formas de hacerlo. Primero lo hice como lo hizo Grendal2501. Luego lo hice similar al usuario15163, puede almacenar la URL de la imagen en la base de fuego y alojar la imagen en su host de la base de fuego o también Amazon S3;

Jakob Hartman
fuente
Error 403 al intentar insertar y renderizar imágenes; problemas de permisos con las imágenes una vez cargadas: cualquier información sobre cómo configurar la carga. Traté de usar acl: 'public-read', pero luego la carga falla, con un 403. Cualquier documento de política de información y política de cubo que pueda ayudar sería genial. AWS: la documentación es difícil y no hay información de depuración con un error que no sea el acceso denegado.
Jamie
2
Haga esto como otra pregunta
Jakob Hartman
idea justa :) hecho, aunque la pila puede ser diferente, si hay alguna incitación que pueda darme, sería bienvenido. La depuración de errores de AWS S3 es súper frustrante, al menos hasta ahora. stackoverflow.com/questions/31998827/…
jamie
2

Usar la cadena Base64 en JSON será muy pesado. El analizador tiene que hacer mucho trabajo pesado. Actualmente, Fresco solo admite bases compatibles con Base64. Mejor pones algo en Amazon Cloud o Firebase Cloud. Y obtener una imagen como una URL. Para que pueda usar Picasso o Glide para el almacenamiento en caché.

Asma
fuente