Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Dúvida no Ex. 4 da Aula 8 - Enviando arquivos ao servidor

Olá.

Há alguma forma de mudar a configuração de gravação do arquivo da pasta:

C:\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\casadocodigo\arquivos-sumario

para a pasta do projeto, conforme o vídeo:

C:\workspace\casadocodigo\src\main\webapp\arquivos-sumario

? Agradeço a ajuda!

4 respostas

Eu fiz uma pequena mudança no código, onde ele verifica se existe todas pastas do C: até a pasta do arquivos-sumário.

Creio que isso te ajudará.

package br.com.casadocodigo.loja.infra;

import java.io.File;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

@Component
public class FileSaver {

    @Autowired
    HttpServletRequest request;

    public String gravar(String basePath, MultipartFile arquivo) {
        try {
            String realPath = request.getServletContext().getRealPath("/" + basePath);
            File file = new File(realPath, arquivo.getOriginalFilename());
            file.getParentFile().mkdirs();
            System.out.println(file.getParent());
            if (!file.exists()) {
                arquivo.transferTo(file);
            }
            return basePath + "/" + arquivo.getOriginalFilename();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

Danillo, agradeço, porém a questão não é a criação da pasta em si, mas sim o caminho em que a pasta ficará.

Entendo que o caso aqui é que o TomCat cria uma pasta "temporária" de execução no servidor e os arquivos estão sendo direcionados para esta pasta. Nesta pasta "temporária" vi que ele carrega minha estrutura de configuração do CSS e tudo mais, mas não é uma réplica da pasta que está no Workspace. O arquivo que foi feito o upload somente fica na "temporária".

Queria saber se em um ambiente de produção também se comporta dessa forma e se é possível controlar essa pasta base do contexto..

solução!

Oi Harley,

É verdade que sua pasta de upload acaba ficando na base do projeto e quando você mandar o tomcat limpar as pasta, ele matará essa pasta também.

Para resolver esse problema, sugerimos colocar os arquivos uma pasta próprio do projeto no servidor. Geralmente, algo do tipo /opt/projeto/uploads.

Fizemos dentro do próprio projeto para facilitar a exibição, pois no html podemos fazer:

<img src="/projeto/uploads/arquivo.png" />

Já se os arquivos estiverem dentro de /opt não será possível fazer isso. O que você terá que fazer é um processo no java que lerá o arquivo na pasta /opt e enviará para o navegador. Assim, seus arquivos ficam protegidos contra possível perda pelo tomcat, ao apagar o WAR ou colocar um novo WAR.

Não sei se foi possível entender, mas por favor, se ainda tiver dúvida é só comentar que tentarei ajudar.

Abraço

Perfeito Paulo, muito obrigado.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software