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

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

HTTP Status 500 - Request processing failed; nested exception is java.lang.RuntimeException: java.io.IOException: java.io.FileNotFoundException:

Recebo essa exception, porem li em alguns forum e não encontrei a solução, me ajudem pf.

6 respostas

Oi Giovanni,

Você precisa criar a pasta para onde será feito o upload e dar permissão para que possa escrever na pasta.

Coloque seu código de upload aqui para ver se acho alguma coisa errada.

Abraço

@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);
        }
    }

Outra coisa que percebi é que o eclipse criou outras pastas como org. e essas coisas. E quando enviamos as imgs de diferentes navegadores não vai e diz que não acha a img. Outra coisa eu crio as pastas e quando vi o eclipse criou um arquivo em vez da pasta. Será que devo criar o projeto novamente?

solução!

Oi Giovanni,

Recomendo que faça seu método assim:

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);
    }
}

Veja se ajuda.

Funcionou sim mas somente no google chrome, tenho uma dúvida como faço para retornar essa imagem? Recuperando o path e jogando na view, como se fosse a imagem do livro cadastrado?

Como é código do servidor, deveria ser independente de navegador. Talvez alguma coisa que tenha feito no html zuou o envio de arquivo.

Mas voltando a sua dúvida, para exibir, é só pegar o path que foi salvo no banco e exibir:

<img src="${produto.sumarioPath}" />

Mas para que isso também funcione, é preciso habilitar o Spring para liberar os arquivos default (imagem, css, js, etc..)

Faremos isso no curso quando formos colocar o Bootstrap mais a frente.

Abraço

Valeu muito obrigado pela atenção! Consegui configurar tudo aqui.