# \[Spring MVC\] Upload de arquivos

**URL:** <https://forum.casadocodigo.com.br/t/spring-mvc-upload-de-arquivos/520>\
**Category:** Livros\
**Tags:** spring-mvc\
**Created:** [Maio 21, 2017, 7:39pm UTC](https://forum.casadocodigo.com.br/t/spring-mvc-upload-de-arquivos/520 "2017-05-21T19:39:05Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![vinicius\_roc](https://avatars.discourse-cdn.com/v4/letter/v/8e8cbc/32.png) [@vinicius\_roc](https://forum.casadocodigo.com.br/u/vinicius_roc)\
**Post date:** [Maio 21, 2017, 7:39pm UTC](https://forum.casadocodigo.com.br/t/spring-mvc-upload-de-arquivos/520/1 "2017-05-21T19:39:05Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![gracyane\_oliveira](https://avatars.discourse-cdn.com/v4/letter/g/f9ae1b/32.png) [@gracyane\_oliveira](https://forum.casadocodigo.com.br/u/gracyane_oliveira)\
**Post date:** [Maio 21, 2017, 9:25pm UTC](https://forum.casadocodigo.com.br/t/spring-mvc-upload-de-arquivos/520/2 "2017-05-21T21:25:43Z")

</div>

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á.

---

<div class="post-metadata">

**Author:** ![vinicius\_roc](https://avatars.discourse-cdn.com/v4/letter/v/8e8cbc/32.png) [@vinicius\_roc](https://forum.casadocodigo.com.br/u/vinicius_roc)\
**Post date:** [Maio 21, 2017, 10:57pm UTC](https://forum.casadocodigo.com.br/t/spring-mvc-upload-de-arquivos/520/3 "2017-05-21T22:57:01Z")

</div>

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á.

---

<div class="post-metadata">

**Author:** ![gracyane\_oliveira](https://avatars.discourse-cdn.com/v4/letter/g/f9ae1b/32.png) [@gracyane\_oliveira](https://forum.casadocodigo.com.br/u/gracyane_oliveira)\
**Post date:** [Maio 21, 2017, 11:31pm UTC](https://forum.casadocodigo.com.br/t/spring-mvc-upload-de-arquivos/520/4 "2017-05-21T23:31:25Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![vinicius\_roc](https://avatars.discourse-cdn.com/v4/letter/v/8e8cbc/32.png) [@vinicius\_roc](https://forum.casadocodigo.com.br/u/vinicius_roc)\
**Post date:** [Maio 21, 2017, 11:36pm UTC](https://forum.casadocodigo.com.br/t/spring-mvc-upload-de-arquivos/520/5 "2017-05-21T23:36:55Z")

</div>

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
