Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
18
respostas

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

Boa tarde galera, fiz os exercícios e segui certim, mais esta dando esse erro:

message Request processing failed; nested exception is java.lang.RuntimeException: java.io.IOException: java.io.FileNotFoundException: C:\Users\Luis Mauro\Documents\Curso 2015\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\casadocodigo\arquivos-sumario\1.jpg (O sistema não pode encontrar o caminho especificado)

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.RuntimeException: java.io.IOException: java.io.FileNotFoundException: C:\Users\Luis Mauro\Documents\Curso 2015\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\casadocodigo\arquivos-sumario\1.jpg (O sistema não pode encontrar o caminho especificado) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863) javax.servlet.http.HttpServlet.service(HttpServlet.java:648) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) root cause

18 respostas

Estou com o mesmo problema.

Mas enquanto não acho a solução fiz o caminho na unha.

//String realPath = request.getServletContext().getRealPath("/")+baseFolder;

Mudei para isto: String realPath = "H:\Alura\casadocodigo\src\main\webapp\arquivos-sumario";

Depois que eu fiz uma vez como o exemplo anterior, retornei para o original.

String realPath = request.getServletContext().getRealPath("/")+baseFolder;

Agora funcionou.

coloquei o caminho direto e deu outro erro:

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.Error: Unresolved compilation problem: Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \ )

org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1287) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)

depois voltei para o que tava e ainda continua o mesmo erro.

coloquei o caminho direto e deu outro erro:

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.Error: Unresolved compilation problem: Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \ )

org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1287) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)

depois voltei para o que tava e ainda continua o mesmo erro.

coloquei o caminho direto e deu outro erro:

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.Error: Unresolved compilation problem: Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \ )

org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1287) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)

depois voltei para o que tava e ainda continua o mesmo erro.

coloquei o caminho direto e deu outro erro:

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.Error: Unresolved compilation problem: Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \ )

org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1287) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)

depois voltei para o que tava e ainda continua o mesmo erro.

coloquei o caminho direto e deu outro erro:

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.Error: Unresolved compilation problem: Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \ )

org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1287) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)

depois voltei para o que tava e ainda continua o mesmo erro.

coloquei o caminho direto e deu outro erro:

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.Error: Unresolved compilation problem: Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \ )

org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1287) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)

depois voltei para o que tava e ainda continua o mesmo erro.

coloquei o caminho direto e deu outro erro:

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.Error: Unresolved compilation problem: Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \ )

org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1287) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)

depois voltei para o que tava e ainda continua o mesmo erro.

Coloca barras duplas

Mudei para isto: String realPath = "H:\Alura\casadocodigo\src\main\webapp\arquivos-sumario";

Coloca barras duplas

Mudei para isto: String realPath = "H:\Alura\casadocodigo\src\main\webapp\arquivos-sumario";

Quando envio a reposta aqui no fórum ele retira as barras duplas.

Então colocando as duas barras com o caminho certo funciono perfeito, problema é que : String realPath = request.getServletContext().getRealPath("/")+ basePath; não esta funcionando.

fica dando aquele erro, que não encontra o caminho especifico.

O meu também não estava funcioando. Mais como eu disse depois eu voltei e funcionou.

Tenta ver os caminhos que estão sendo passado no seus sistema.

Vejas os System.out.println()...

public String write(String baseFolder, MultipartFile file) {
    try {
        System.out.println("baseFolder " + baseFolder);
        System.out.println("file " + file);


        String realPath = request.getServletContext().getRealPath("/")+baseFolder;
        //String realPath = "H:\\Alura\\casadocodigo\\src\\main\\webapp\\arquivos-sumario";
        System.out.println("realPath " + realPath);
        String path = realPath + "\\" + file.getOriginalFilename();

      //  String filePath = request.getServletContext().getRealPath("/");

        System.out.println("path " + path);
        file.transferTo(new File(path));

        System.out.println("retorno " + baseFolder + "\\" + file.getOriginalFilename());
        return baseFolder + "/" + file.getOriginalFilename();
    } catch (IOException | IllegalStateException ex) {
        throw new RuntimeException(ex);
    }

}

fiz os testes, esta indo para esse caminho:

realPath C:\Users\Luis Mauro\Documents\Curso 2015\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\casadocodigo\arquivos-sumario

path C:\Users\Luis Mauro\Documents\Curso 2015\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\casadocodigo\arquivos-sumario\12576315_913750188720249_510229148_n.jpg


o caminho correto seria esse:

realPath C:\Users\Luis Mauro\Documents\Curso 2015\workspace\casadocodigo\src\main\webapp\arquivos-sumario

path C:\Users\Luis Mauro\Documents\Curso 2015\workspace\casadocodigo\src\main\webapp\arquivos-sumario\12576315_913750188720249_510229148_n.jpg retorno arquivos-sumario\12576315_913750188720249_510229148_n.jpgerro.

Estava enfrentando o mesmo erro e percebi duas coisas:

1ª - Dependendo do browser o valor enviado no input sumário é diferente. No meu caso, o Edge encaminhava o caminho completo (C:\pasta\arquivo.txt), já o Chrome enviava apenas o nome do arquivo (arquivo.txt). Percebi isto observando o valor de getOriginalFilename();

2ª - Acessei o path onde deveria existir a pasta "arquivos-sumario" pelo explorer (no exemplo acima... C:\Users\Luis Mauro\Documents\Curso 2015\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\casadocodigo) e percebi que, embora o eclipse exibisse "arquivos-sumario" como pasta o explorer via como um arquvo. Removi o arquivo e criei a pasta no mesmo diretório pelo explorer e funcionou...

Veja se não este o caso. Abraço.

solução!

Realmente não consegui salvar deste modelo, pelo visto o tomcat cria uma pasta no servidor dos arquivos já configurados, porém não é criado a pasta onde salva os arquivos.

Com isso eu fiz a verificação se existia o diretório pai e depois cria o arquivo caso não exista.

package br.com.casadocodigo.loja.infra;

import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;

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

Boa tarde, poderiam, por favor, disponibilizar o código completo do projeto? O final de todos, assim consigo verificar onde erreí.