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

O sistema não pode encontrar o caminho especificado

Não estou conseguindo salvar o meu arquivo no servidor.

package br.com.casadocodigo.loja.infra;

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

import javax.management.RuntimeErrorException;
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 pastaBase, MultipartFile file) {

        try {

            //String realPath = request.getServletContext().getRealPath("/" + pastaBase);
            //String pathname = realPath + "/" + file.getOriginalFilename();
            String homePath = System.getProperty("user.home");
            String baseFolderPath = homePath + "/" + pastaBase;
            String path = baseFolderPath +"/" +file.getOriginalFilename();

            file.transferTo(new File(path));

            return pastaBase + "/" + file.getOriginalFilename();
        } catch (IllegalStateException | IOException e) {

            throw new RuntimeException(e);
        }

    }

}
FileServer.class
package br.com.casadocodigo.loja.conf;

import javax.servlet.Filter;
import javax.servlet.MultipartConfigElement;
import javax.servlet.ServletRegistration.Dynamic;

import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class ServeletSpringMVC extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] { AppWebConfigurattion.class, JPAConfiguration.class };
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }

    @Override
    protected Filter[] getServletFilters() {

        CharacterEncodingFilter trataFiltro = new CharacterEncodingFilter();
        trataFiltro.setEncoding("UTF-8");

        return new Filter[] { trataFiltro };
    }

    @Override
    protected void customizeRegistration(Dynamic registration) {

        registration.setMultipartConfig(new MultipartConfigElement(""));

    }

}
Servelet.class

`

4 respostas
package br.com.casadocodigo.loja.conf;

import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.format.datetime.DateFormatter;
import org.springframework.format.datetime.DateFormatterRegistrar;
import org.springframework.format.support.DefaultFormattingConversionService;
import org.springframework.format.support.FormattingConversionService;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.support.StandardServletMultipartResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

import br.com.casadocodigo.loja.controller.HomeController;
import br.com.casadocodigo.loja.dao.ProdutoDAO;
import br.com.casadocodigo.loja.infra.FileSaver;

@EnableWebMvc
@ComponentScan(basePackageClasses = {HomeController.class,ProdutoDAO.class,FileSaver.class})
public class AppWebConfigurattion extends WebMvcConfigurerAdapter {


   @Bean
    public InternalResourceViewResolver internalResourceViewResolver() {

        InternalResourceViewResolver resolver = new InternalResourceViewResolver();

        resolver.setPrefix("/WEB-INF/views/");

        resolver.setSuffix(".jsp");

        return resolver;
    }

   @Bean
   public MessageSource messageSource(){

        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("/WEB-INF/messages");
        messageSource.setDefaultEncoding("UTF-8");
        messageSource.setCacheSeconds(1);
        return messageSource;

   }
   @Bean
   public FormattingConversionService mvcConversionService(){
       DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService();

       DateFormatterRegistrar registrar = new DateFormatterRegistrar();

       registrar.setFormatter(new DateFormatter("dd/MM/yyyy"));
       registrar.registerFormatters(conversionService);

       return conversionService;

   }

   @Bean
   public MultipartResolver multipartResolver(){
       return new StandardServletMultipartResolver();
   }

   @Override
   public void addResourceHandlers(ResourceHandlerRegistry registry) {
       registry.addResourceHandler("/resources/**").addResourceLocations(
               "/resources/");
   }
}

AppWebConfiguration.class
package br.com.casadocodigo.loja.controller;

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.PathVariable;
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.model.Produto;
import br.com.casadocodigo.loja.model.TipoPreco;
import br.com.casadocodigo.loja.validation.ProdutoValidation;

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

    @Autowired
    private FileSaver file;

    @Autowired
    private ProdutoDAO produtoDao;

    @InitBinder
    public void initBinder(WebDataBinder blinder){
        blinder.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 = file.write("arquivos-sumario", sumario);
        produto.setSumarioPath(path);
        produtoDao.gravar(produto);
        redirectAttributes.addFlashAttribute("message","Produto cadastrado 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;

    }

    @RequestMapping("/detalhe/{id}")
    public ModelAndView detalhe(@PathVariable("id")Integer id){
        ModelAndView modelAndView = new ModelAndView("produtos/detalhe");
    Produto produto = produtoDao.listarId(id);

    modelAndView.addObject("produto", produto);
        return modelAndView;
    }
}
ProdutosControoler.class

Fala Felipe,

Qual é o erro que ocorre quando você tenta salvar? Posta aqui pra gente o stack do erro, por favor.

solução!

Resolvido através do link: http://blog.alura.com.br/usando-a-pasta-do-tomcat-pelo-eclipse/

Obrigado!