[Spring MVC] Upload de arquivos

Achei muito interessante a abordagem de upload de arquivos para a S3.

Porém tem uma dúvida muito grande que tenho em relação a isso, seja com S3 ou seja local.

A maioria das vezes o upoad de arquivos é feito para uma imagem.

Então temos o fluxo
1 - Usuário entra no formulário
2 - Usuário faz o upload
3 - Usuário visualiza o preview
4 - Usuário salva, cancela ou faz outro upload

Toda vez que ele fizer um upload temos a possibilidade dele descartar e essa imagem ficara ocupando espaço para sempre, seja no S3 ou no servidor.

Qual a melhor abordagem para resolver esse problema e evitarmos que o servidor fique sem espaço ou que pagamos a mais desnecessariamente pelo S3?

A abordagem que tenho visto em relação a upload de arquivos é:
1 - Ao efetuar o upload você salva essa imagem em um diretório temporário (/temp/idUsuario/files.png) no servidor.
2 - Quando o usuário salvar os dados você primeiro transfere as imagens para um diretório permanente e apaga o arquivo do diretório temporário. Caso, após o upload, o usuário não salve o dados, então, no botão cancelar você deleta o que tiver no diretório temporário. Ainda existe a possibilidade de após o upload a conexão do usuário cair e ele ter que iniciar novamente o upload.(Nesse caso a imagem anterior ainda está no servidor). Então sugiro que a cada vez que o usuário fizer o upload, antes de você escrever o arquivo no servidor, você delete o arquivo que porventura ainda esteja lá.

Ok

Pensei nisso…

Mas meu medo é… A ação de excluir o arquivo depende da ação do usuário. Se usuário não interagir mais, simplesmente fechar a página o arquivo vai ficar para sempre lá.

Veja que o usuário terá um diretório temporário com o id dele no servidor - /temp/userId/.
Caso ele faça o upload e saia sem salvar, da próxima vez que ele entrar para fazer upload você limpa o diretorio temp/userId/ antes de escrever a nova img no diretório. Essa é uma forma de não deixar arquivo na pasta temporária. E em algum momento o usuário vai acabar salvando os dados aí é que você aproveita também para limpar o /temp/userId/. Agora se o usuário fizer o upload e não salvar e nunca mais entrar no sistema aí os arquivos realmente vão ficar lá até que alguém decida removê-lo.

1 curtida

Uma estratégia interessante. Gostei.

Isso reduz muito o problema, no pior caso da para configurar um cron que limpe os arquivos muitos antigos!

Muito obrigado Gracyane