Solucionado (ver solução)
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í.