4
respostas

Duvida Aula9 - video 2

Boa noite Pessoal, estou com um problema na aula enviando arquivos ao servidor.

Na hora que faço o Upload do arquivo aparece o seguinte erro.

HTTP Status 500 - Request processing failed; nested exception is java.lang.RuntimeException: java.io.IOException: java.io.FileNotFoundException: /home/giovanni/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/casadocodigo/arquivos-sumario/novafoto.png (No such file or directory)

Ja Criei o diretorio mais o erro continua aparecendo. Vejam os prints

https://uploaddeimagens.com.br/imagens/erro-tela-png

https://uploaddeimagens.com.br/imagens/erro3-png--19

https://uploaddeimagens.com.br/imagens/erro4-png--8

Desde de já eu agradeço.

4 respostas

Ola Giovanni, tudo bem ?

Pode colocar seu código do controller aqui pra gente dar uma olhada ?

Importante notarmos esse trecho: (No such file or directory). Possível que o arquivo não esteja presente ou mesmo o diretório não existir.

Atente-se também para o caminho que a exception aponta: /home/giovanni/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/casadocodigo/arquivos-sumario/. O programa está salvando na pasta temporária que o eclipse usa pra subir o server. Qual o diretório você criou pra salvar os arquivos ? Tente salvar, por exemplo, na pasta do usuário pra fazer um teste. É possível obter o caminho da pasta do usuário assim: System.getProperty("user-home");

Abraço!

Fala Rafael beleza.

Estou postando minha controller


package br.com.casadocodigo.loja.controllers;

import java.nio.file.Path;
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.daos.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.validacao.ProdutoValidation;

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

    @Autowired
    private ProdutoDAO produtoDao;

    @Autowired
    private FileSaver fileSaver;

    @InitBinder
    public void initBinder(WebDataBinder binder){
        binder.addValidators(new ProdutoValidation());
    }

    @RequestMapping("/form")
    public ModelAndView form(Produto produto) {
        ModelAndView modelAndView = new ModelAndView("produtos/form");
        modelAndView.addObject("tipos", TipoPreco.values());

        return modelAndView;
    }

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

        produtoDao.gravar(produto);

        redirectAttributes.addFlashAttribute("sucesso", "Produto cadastro com sucesso");
        return new ModelAndView("redirect:produtos");
    }

    @RequestMapping(method=RequestMethod.GET)
    public ModelAndView listar() {
        List<Produto> produtos = produtoDao.listar();
        ModelAndView modelAndView = new ModelAndView("produtos/lista");
        modelAndView.addObject("produtos", produtos);

        return modelAndView;
    }


}

Olá Giovanni,

Pelo que vejo não há nada de errado com seu controller. Tente fazer com que seu FileSaver salve o arquivo em um diretório direto no host algo como C:\Users\seuUsuario\sumarios\.

String pastaDoUsuario = System.getProperty("user.home");
String separador =  System.getProperty("file.separator");
String caminho = pastaDoUsuario + separador + "sumarios" + separador + "nomeDoArquivo.pdf";

Possívelmente o programa está tendo problemas para acessar o diretório temporário dentro da pasta metadata do eclipse. Isso acontece porque o plugin do Web Tools do eclipse por padrão cria como uma "copia" da pasta do servidor de aplicação internamente, para que as mudanças nao incidam diretamente sobre a pasta de instalação do servidor na sua máquina. Tente alterar isso: dois cliques no server > Em Server Locations > marque a opção Use Tomcat Installation . Dessa maneira o eclipse toma controle sobre a pasta de instalação do seu servidor. O deploy feito pelo eclipse pra rodar vai criar a aplicação na pasta de instalação do tomcat e tudo que for salvo relativo ao caminho da aplicação ficará lá. Talvez resolva o problema de acesso a esse diretório.

Espero ter ajudado. Abraço!

Pessoal tive o mesmo problema aqui e resolvi fazendo o que o Rafael Rollo recomendou. Obrigado galera. Abraços