Estratégia para upload de arquivos

Boaaa!

Preciso de uma ajuda quanto a arquitetura ou estrutura de um aplicativo que combinará informações em um formulário com input files. A ideia é que o usuário possa incluir fotos e videos em um relatório.

Já criei a API para consumo dos dados do relatório, com Java Spring, baseada em REST.

Agora, dúvidas surgiram quanto a estratégia de upload e bind dos arquivos com o relatório. Pensei da seguinte forma: no momento da inclusão dos arquivos crio a referência, isto é, incluo no relatório o nome dos arquivos. No submit, após ou antes, faço o upload dos arquivos. O que poderia ser mais para frente um outro thread. Também não quero utilizar a API para tal, fazendo o upload pelo APP.

Estou pensando em armazenar os arquivos no google drive, que fornece API para tal.

Enfim, o que acham da abordagem? Obrigado!

PS: a api foi construída em Java Spring e o front em react + redux + redux-form

Eu estive pesquisando recentemente sobre best practices quando o assunto é upload de arquivos numa aplicação WEB. Ainda não cheguei em uma conclusão e tenho algumas dúvidas de como proceder de verdade, mas vou compartilhar contigo os pontos aos quais eu cheguei até agora:

  • Salvar blobs (a imagem inteira) no DB não é uma boa ideia. Acho que o melhor é salvar o caminho para se chegar na imagem (um link de um serviço externo, por exemplo);

  • Nunca acessar o sistema de arquivos diretamente pela aplicação WEB. No Java EE, por exemplo, nunca se sabe onde um managed bean, onde provavelmente o código de IO estará, vai estar executando. Inclusive, o uso de IO direta dentro dessas classes é extremamente desencorajado;

  • Uma solução é utilizar um Shared File System (ou Sistema de Arquivos Compartilhado). Essa foi a mais interessante que eu encontrei até agora. Você sobe um serviço feito especificamente para lidar com arquivos. Existem programas prontos que fazem isso, inclusive de forma distribuída. Assim é só delegar completamente todas as operações de IO de arquivos para esse serviço;

  • Eu também encontrei um conceito chamado “Clustered File System”. Eu não pesquisei muito sobre isso. Pode ser que seja a mesma coisa do Shared File System, ou não;

  • Não inclua a persistência do arquivo na transação da requisição, pois toma muito tempo.

1 curtida

Muito obrigado!

A gravação da imagem no banco já havia descartado realmente. Até por que utilizarei neste projeto MongoDB, que tem por restrição o tamanho dos documentos em 16MB.

Procurei algumas serviços de host de imagens e descobri o cloundinary. O serviço fornece uma API para upload de arquivos e actions como criação de thumbs ou aplicação de filtros. De mogo Eager, isto é, já no upload, como corpo da requisição Http.

O desafio é criar um APP baseado no React. Mas por eu vir do JSF, estou um pouco perdido.

Claro que o Cloudinary é pago, mas a princípio vou utilizá-lo. Talvez trocando pela Amazon depois. Também dei uma olhada no onedrive e acho que tb fornecem uma API.

Bom, segue a jornada, mas acho que vou marcar como Solucionada.

Abç.