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

Como usar o código deste post

Ola, encontrei esse código em um post do forum que mostra o arquivo no navegador

@RequestMapping(method = RequestMethod.GET, value = "/download/{fileName}")
    public void download(HttpServletResponse response, @PathVariable("fileName") String fileName) {
        String path = servletContext.getRealPath("/upload/");
        Path arquivo = Paths.get(path, fileName + ".pdf");        

        if(Files.exists(arquivo)) {   //inline
            response.setHeader("Content-Disposition", "inline");
            response.setContentType("application/pdf");

            try {
                Files.copy(arquivo, response.getOutputStream());
                response.getOutputStream().flush();
            } 
            catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }

entao eu alterei o código para mostrar imagens dessa forma:

    @RequestMapping(method = RequestMethod.GET, value = "/file/{filePath}")
    public void file(HttpServletResponse response, @PathVariable("filePath") String filePath) {
        String path = servletContext.getRealPath(filePath);
        System.out.println("Caminho real do arquivo: "+filePath);
        Path arquivo = Paths.get(filePath);        

        if(Files.exists(arquivo)) {   //inline
            response.setHeader("Content-Disposition", "inline");
            response.setContentType("image/png");

            try {
                Files.copy(arquivo, response.getOutputStream());
                response.getOutputStream().flush();
            } 
            catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }

e nas minhas paginas fiz o seguinte:

<img width="280px" height="395px" src="<c:url value="/file/${produto.sumarioPath }" /> />" class="product-featured-image" />

Mas continuo recebendo o erro 404 o que estou fazendo de errado?

4 respostas

Olá Michel,

parece que sobrou um /> dentro do src da img, pode ser isso que está causando o 404:

src="<c:url value="/file/${produto.sumarioPath }" /> />"
solução!

Olá, obrigado pela resposta, Foram vários fatores: 1º Eu digitei errado mesmo o fim da tag como vc mostrou, MAS, ainda não funcionou 2º Eu tirei o "/file" do meu caminho para no fim ficar só assim

<c:url value="/${produto.sumarioPath }" var="imagemLivro"/>
<img width="280px" height="395px" src="${imagemLivro}" class="product-featured-image" />

A anotação do método ficou dessa forma

@RequestMapping(method = RequestMethod.GET, value = "/{filePath}")
    public void file(HttpServletResponse response, @PathVariable("filePath") String filePath) {

3º Tive que dar varios deploy/UpdateProject/maven build/maven install, ou seja, tambem estava com problema para atualizar o contexto do meu sistema no servidor

MAS agora esta funcionando belezinha De aprendizado verifiquei que o contexto da aplicação com Spring é um fator critico, dificil de atualizar, tive que limpar muitas vezes o servidor, fazer varias vezes o Update e build como falei a cima. Por ultimo gostaria de saber mais sobre contexto da aplicação e deploy qual curso voces me indicam?

Um curso que fala um pouco sobre processo de deploy, só que especificamente na cloud da amazon, é o curso de AWS https://cursos.alura.com.br/course/spring-amazon.

Outra coisa que pode te ajudar mais com a parte do build do projeto seria o curso específico de maven https://cursos.alura.com.br/course/maven-build-do-zero-a-web.

Um último que também pode ser interessante é o de docker que vai ajudar na criação dos ambientes do servidor https://cursos.alura.com.br/course/docker-e-docker-compose

Obrigado mesmo!!!