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

The system cannot find the path specified

Bom dia galera Ao tentar savar o sumarioPath, erro HTTP 500 ocorre.

Apr 02, 2019 10:28:55 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/casadocodigo] threw exception [Request processing failed; nested exception is java.lang.RuntimeException: java.io.IOException: java.io.FileNotFoundException: C:\Users\Lenovo\workspace-springMVC\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\casadocodigo\arquivos-sumario\Vinicius Mariano da Rocha.pdf (The system cannot find the path specified)] with root cause
java.io.FileNotFoundException: C:\Users\Lenovo\workspace-springMVC\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\casadocodigo\arquivos-sumario\Vinicius Mariano da Rocha.pdf (The system cannot find the path specified)
    at java.io.FileOutputStream.open0(Native Method)
    at java.io.FileOutputStream.open(Unknown Source)
    at java.io.FileOutputStream.<init>(Unknown Source)
    at java.io.FileOutputStream.<init>(Unknown Source)
    at org.apache.tomcat.util.http.fileupload.disk.DiskFileItem.write(DiskFileItem.java:400)
    at org.apache.catalina.core.ApplicationPart.write(ApplicationPart.java:120)
    .................
4 respostas
package br.com.casadocodigo.loja.infra;

import java.io.File;
import java.io.IOException;

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) {

        System.out.println("Passou aqui!!!");
        try {
            String realPath = request.getServletContext().getRealPath("/" + baseFolder);
            String path = realPath + "/" + file.getOriginalFilename();
            file.transferTo(new File(path));

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

        } catch (IllegalStateException | IOException e) {
            throw new RuntimeException(e);
        }

    }
}
package br.com.casadocodigo.loja.controllers;

import java.util.List;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import br.com.casadocodigo.loja.dao.ProdutoDAO;
import br.com.casadocodigo.loja.infra.FileSaver;
import br.com.casadocodigo.loja.models.Produto;
import br.com.casadocodigo.loja.models.TipoPreco;
import br.com.casadocodigo.loja.validation.ProdutoValidation;

@Controller
@RequestMapping("/produtos")
public class ProdutosController {

    @Autowired
    private FileSaver fileSaver;

    @Autowired
    private ProdutoDAO dao;

    @InitBinder
    public void intBinder(WebDataBinder binder) {
        binder.addValidators(new ProdutoValidation());
    }
@RequestMapping(method = RequestMethod.POST)
    public ModelAndView gravar(MultipartFile sumario, @Valid Produto produto, BindingResult result,
            RedirectAttributes redirectAttributes) {

        if (result.hasErrors()) {
            return form(produto);
        }
        String path = fileSaver.write("arquivos-sumario", sumario);
        produto.setSumarioPath(path);

        dao.gravar(produto);
        redirectAttributes.addFlashAttribute("message", "Produto gravado com sucesso!!");
        return new ModelAndView("redirect:produtos");

    }

Olá Vinicius!

Duas obervações:

1 - Esse é um erro ao tentar encontrar o arquivo. O caminho que você especificou está ok? O nome do arquivo também está ok?

2 - Pelo que vi no log o nome do PDF contém espaços certo? Tire esses espaços e tente novamente.

Aguardo seu retorno!

solução!

Bom dia Guilherme, tentei realizar o processo com outros tipos de arquivos e com nome sem espacos, porem o problema persistil. Estava ultilizando o Apache Tomcat na versao 9 e resolvi testar com 7, ai funcionou!

Muito obrigado pela atencao!!!