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