Como fazer upload massivo de fotos e vídeos de forma eficiente?
Olá a todos!
Estou desenvolvendo um projeto pessoal que pretendo colocar no ar e esbarrei na seguinte situação: para facilitar a vida do usuário quando ele subir fotos ou vídeos (a princípio, curtos, de até 90 segundos), quero oferecer a opção de selecionar vários arquivos em suas respectivas seções e enviar tudo de uma vez. Se ele tiver 3 mil fotos e mil vídeos, seleciona tudo e manda.
O sistema deve receber os arquivos no backend, transformar as fotos em WebP e converter os vídeos para MP4 (720p) usando FFmpeg, armazenando-os no bucket correto da AWS, dentro da pasta de cada cliente.
Se o cliente subir mil fotos e as de número 354 e 789 falharem por algum motivo, as demais devem ser enviadas ao bucket corretamente. O usuário deve visualizar na tela quais arquivos falharam para tentar o reenvio. A mesma lógica se aplica aos vídeos.
Além disso, não pode haver interferência entre usuários: se o "Cliente A" sobe 10 mil fotos, isso não pode travar o upload de apenas duas fotos do "Cliente B". Estou evitando ao máximo o uso de filas (como Kafka ou SQS) para manter a arquitetura simples, mas preciso levar em consideração o consumo de banda larga caso alguém faça uploads massivos.
Essa funcionalidade é a parte mais complexa do sistema até o momento. A forma mais simples que concebi foi fazer o frontend (Next.js + Axios) enviar batches de 50 fotos e 10 vídeos (devido ao processamento mais pesado do FFmpeg). Quando o backend (Java + Spring, embora eu considere mudar para Go por eficiência e custo na AWS) recebe os arquivos, ele abre threads para processar esses batches paralelamente, na lógica de uma thread por batch.
Alguém já lidou com uma situação parecida?
Obrigado!