1
resposta

java.io.FileNotFoundException

Ao realizar o Upload do arquivos o método gravar da classe ProdutosController utiliza a classe FileSaver com o código descrito abaixo:

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
    private HttpServletRequest request;

    public String write(String baseFolder, MultipartFile file) {

        try {
            String realPath = request.getServletContext().getRealPath("/" + baseFolder);
            String path = realPath + "/" + file.getOriginalFilename();
            file.transferTo(new File(path));

            return baseFolder + "/" + file.getOriginalFilename();

        } catch (Exception e) {
            throw new RuntimeException(e);    
        }

    }
}

porém ao identificar o arquivo a ser transferido não consegue enviar para o servidor. gerando o erro:

java.lang.RuntimeException: java.io.IOException: java.io.FileNotFoundException: D:\bughunter\Desenv\Mobile\apache-tomcat-9.0.27\wtpwebapps\casadocodigo\arquivos-sumario\D:\Temp\Scanner_20200103.jpg (A sintaxe do nome do arquivo, do nome do diretório ou do rótulo do volume está incorreta)
    br.com.casadocodigo.loja.infra.FileSaver.write(FileSaver.java:29)

Utiliza o ambiente de desenvolvimento no Windows 10, Eclipse 2019-06, Tomcat 9.0.27 e pesquisando já realizei as configurações no Eclipse para tomar o controle do TOMCAT.

Está faltando algum tratamento para o nome do arquivo ou algo assim ?

1 resposta

Oi Antonio

O problema me parece ser que o método .getOriginalFilename() está retornando "D:\Temp\Scanner_20200103.jpg" (com o path) ao invés de apenas Scanner_20200103.jpg, que é o esperado. Você poderia fazer um debug para ver se é isso mesmo?