Estou trabalhando no upload de imagens, tudo funciona muito bem, mas tenho 100 fotos e gostaria de mostrar todas na minha View
, como recebo a lista completa das imagens em uma pasta, não consigo encontrar nenhuma API para isso trabalhos.
firebase
firebase-storage
Luis Ruiz Figueroa
fonte
fonte
Respostas:
Desde Firebase SDKs para JavaScript versão 6.1 , iOS versão 6.4 e Android versão 18.1, todos têm um método para listar arquivos.
A documentação é um pouco esparsa até agora, então recomendo conferir a resposta de Rosário para mais detalhes.
Resposta anterior, uma vez que esta abordagem ainda pode ser útil às vezes:
No momento, não há chamada de API no Firebase SDK para listar todos os arquivos em uma pasta do Cloud Storage de um aplicativo. Se precisar dessa funcionalidade, você deve armazenar os metadados dos arquivos (como os URLs de download) em um local onde possa listá-los. O Firebase Realtime Database e o Cloud Firestore são perfeitos para isso e permitem que você também compartilhe facilmente os URLs com outras pessoas.
Você pode encontrar uma boa amostra (mas um tanto envolvente) disso em nosso aplicativo de amostra FriendlyPix . O código relevante para a versão web está aqui , mas também existem versões para iOS e Android.
fonte
Desde maio de 2019, a versão 6.1.0 do Firebase SDK para Cloud Storage agora é compatível com a listagem de todos os objetos de um intervalo. Você só precisa ligar
listAll()
para umReference
:Por favor , note que para utilizar esta função, você deve opt-in para a versão 2 de regras de segurança , que pode ser feito, fazendo
rules_version = '2';
a primeira linha de suas regras de segurança:Eu recomendo verificar os documentos para referência futura.
Além disso, de acordo com a configuração , na Etapa 5, este script não é permitido,
Node.js
poisrequire("firebase/app");
não retornafirebase.storage()
como uma função. Isso só é conseguido usandoimport * as firebase from 'firebase/app';
.fonte
Desde março de 2017: com a adição do Firebase Cloud Functions e a integração mais profunda do Firebase com o Google Cloud, isso agora é possível.
Com o Cloud Functions, você pode usar o pacote Google Cloud Node para fazer operações épicas no Cloud Storage. Abaixo está um exemplo que obtém todos os URLs de arquivo em uma matriz do Cloud Storage. Esta função será acionada sempre que algo for salvo no armazenamento em nuvem do Google.
Nota 1 : esta é uma operação bastante dispendiosa do ponto de vista computacional, pois tem que percorrer todos os arquivos em um intervalo / pasta.
Nota 2 : Escrevi isso apenas como exemplo, sem dedicar muitos detalhes às promessas etc. Só para dar uma ideia.
Espero que isso lhe dê uma ideia geral. Para melhores exemplos de funções de nuvem, confira o repositório Github do Google cheio de exemplos de funções de nuvem para Firebase . Verifique também a documentação da API do Google Cloud Node
fonte
.then
como este:this.bucket .getFiles({ prefix: 'path/to/directory' }) .then((arr) => {})
Como não há idioma listado, responderei em Swift. É altamente recomendável usar o Firebase Storage e o Firebase Realtime Database juntos para realizar listas de downloads:
Compartilhado:
Envio:
Baixar:
Para obter mais informações, consulte Zero to App: Develop with Firebase , e seu código-fonte associado , para um exemplo prático de como fazer isso.
fonte
Uma solução alternativa pode ser criar um arquivo (ou seja, list.txt) sem nada dentro, neste arquivo você pode definir os metadados personalizados (ou seja, um Mapa <String, String>) com a lista de todos os URLs do arquivo.
Portanto, se você precisar fazer o downlaod de todos os arquivos em um feed, primeiro faça o download dos metadados do arquivo list.txt e, em seguida, itere os dados personalizados e faça o download de todos os arquivos com os URLs no mapa.
fonte
Eu também encontrei esse problema quando estava trabalhando em meu projeto. Eu realmente gostaria que eles fornecessem um método API final. Enfim, foi assim que eu fiz: quando você estiver carregando uma imagem para o armazenamento do Firebase, crie um objeto e passe esse objeto para o banco de dados do Firebase ao mesmo tempo. Este objeto contém o URI de download da imagem.
Posteriormente, quando quiser baixar imagens de uma pasta, basta iterar os arquivos dessa pasta. Esta pasta tem o mesmo nome que a "pasta" no Firebase storage, mas você pode nomeá-la como quiser. Eu os coloquei em uma discussão separada.
Agora que tenho uma lista de objetos contendo os URIs para cada imagem, posso fazer o que quiser com eles. Para carregá-los em imageView, criei outro thread.
Isso retorna uma lista de Bitmap, quando termina eu simplesmente os anexei ao ImageView na atividade principal. Os métodos abaixo são @Override porque eu tenho interfaces criadas e escuto a conclusão em outros threads.
Observe que eu tenho que esperar que a imagem da lista seja retornada primeiro e depois chamar o thread para trabalhar no bitmap da lista. Nesse caso, a imagem contém o URI.
Espero que alguém ache útil. Também servirá como uma linha de guilda para mim no futuro.
fonte
Mais uma maneira de adicionar a imagem ao banco de dados usando o Cloud Function para rastrear todas as imagens enviadas e armazená-las no banco de dados.
Código completo aqui: https://gist.github.com/bossly/fb03686f2cb1699c2717a0359880cf84
fonte
Para o node js, usei este código
fonte
Você pode listar arquivos em um diretório de armazenamento do firebase pelo método listAll (). Para usar este método, é necessário implementar esta versão do Firebase Storage. 'com.google.firebase: firebase-storage: 18.1.1'
https://firebase.google.com/docs/storage/android/list-files
Lembre-se de atualizar as Regras de segurança para a versão 2.
fonte
Na verdade, isso é possível, mas apenas com uma API do Google Cloud em vez de uma do Firebase. É porque um Firebase Storage é um Google Cloud Storage Bucket que pode ser facilmente alcançado com as APIs do Google Cloud. No entanto, você precisa usar OAuth para autenticação em vez do Firebase.
fonte
Eu enfrentei o mesmo problema, o meu é ainda mais complicado.
O administrador fará o upload dos arquivos de áudio e PDF para o armazenamento:
arquivos audios / season1, season2 ... / class1, class 2 / .mp3
livros / arquivos .pdf
O aplicativo Android precisa obter a lista de subpastas e arquivos.
A solução é capturar o evento de upload no armazenamento e criar a mesma estrutura no firestore usando a função de nuvem.
Etapa 1: Crie manualmente a coleção de 'armazenamento' e o documento 'áudios / livros' no Firestore
Etapa 2: configurar a função de nuvem
Pode levar cerca de 15 minutos: https://www.youtube.com/watch?v=DYfP-UIKxH0&list=PLl-K7zZEsYLkPZHe41m4jfAxUi0JjLgSM&index=1
Etapa 3: capturar o evento de upload usando a função de nuvem
Etapa 4: recuperar a lista de pastas / arquivos no aplicativo Android usando o firestore
Etapa 5: obter url de download
Nota
Temos que colocar "sub" coleção para cada item, pois o firestore não oferece suporte para recuperar a lista de coleção.
Levei 3 dias para descobrir a solução, espero que leve 3 horas no máximo.
Felicidades.
fonte
Prolongando a resposta de Rosário Pereira Fernandes , para uma solução JavaScript:
JavaScript
como idioma padrãofunctions / package.json
listAll
funçãoindex.js
images.js
firebase deploy
para carregar sua função de nuvembuild.gradle
aula de kotlin
Em relação ao desenvolvimento deste recurso, encontrei alguns problemas que podem ser encontrados aqui .
fonte
Para fazer isso com JS
Você pode anexá-los diretamente ao seu contêiner div ou pode enviá-los para uma matriz. A seguir, você verá como anexá-los ao seu div.
1) Ao armazenar suas imagens no armazenamento, crie uma referência à imagem em seu banco de dados Firebase com a seguinte estrutura
2) Quando você carrega o documento, extraia todos os URLs de origem da imagem do banco de dados, em vez do armazenamento com o seguinte código
fonte
Você pode usar o seguinte código. Aqui, estou enviando a imagem para o armazenamento do firebase e, em seguida, estou armazenando o url de download da imagem no banco de dados do firebase.
Agora, para buscar todas as imagens armazenadas no banco de dados do firebase, você pode usar
Para mais detalhes, você pode ver meu exemplo de armazenamento de Firebase post .
fonte
Então, eu tinha um projeto que exigia o download de recursos do armazenamento do Firebase, então tive que resolver esse problema sozinho. Aqui está como :
1- Primeiro, faça um modelo de dados por exemplo
class Choice{}
, nessa classe define uma variável String chamada nome da imagem para que seja assim2- a partir de um banco de dados / banco de dados firebase, codifique os nomes das imagens para os objetos, portanto, se você tiver um nome de imagem chamado Apple.png, crie o objeto a ser
3- Agora, obtenha o link para os ativos em seu armazenamento do Firebase, que será algo parecido com isso
como este
4 - por fim, inicialize sua referência de armazenamento firebase e comece a obter os arquivos por um loop como esse
5- é isso
fonte
fonte
Estou usando
AngularFire
e uso o seguinte para obter todos osdownloadURL
fonte
Para Android, a melhor prática é usar FirebaseUI e Glide.
Você precisa adicionar isso ao seu gradle / app para obter a biblioteca. Observe que ele já tem o Glide nele!
E então, em seu código, use
fonte