12
respostas

ERRO NO MÉTODO

Estou com erro no método quando chega na linha:

 file.transferTo(new File(path));
public String write(String baseFolder, MultipartFile file) {
    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);
    }
}

O meu realPath vem assim:

C:\DEV\PROJETOS\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\mercadinho-jt\arquivos-produto

E o Path fica assim:

C:\DEV\PROJETOS\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\mercadinho-jt\arquivos-produto/Tomate-destaque.jpg

Se reparar a barra está ao contrário.. Também gostaria de saber se pelo fato do projeto está dentro do C: na hora de transferir a imagem da erro?.

12 respostas

Daniel,

Experimente este código dentro do bloco try:

String realPath = request.getServletContext().getRealPath("\"+baseFolder);
        String path = realPath + "\" + file.getOriginalFilename();
        file.transferTo(new File(path));
        return baseFolder + "\" + file.getOriginalFilename();

Creio que o seu problema seja a confusão entre usar '/' ou '\' para o path e acessar arquivos.

Erick, Então se deixo com essa barra "\" já da erro na primeira linha e se coloco duas \ o erro some, mas o erro ocorre na mesma linha.

file.transferTo(new File(path));

Experimente então "\"

Duas barras assim indica para o compilador que você quer realmente utilizar a barra invertida.

Copiei exatamente o trecho que você falou, mas acusa erro por conta da barra.

Desculpe. A formatação modificou o que iria responder.

Experimente usar: "\\"

Coloquei as duas barras. Mais o erro continua na mesma linha.

O caminho que é pego é o seguinte:

C:\DEV\PROJETOS\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\mercadinho-jt\arquivos-produto\Tomate-destaque.jpg

Será que não é o caminho que possa ser o problema? Pqe se eu vou no properties da pasta arquivos-produto é assim que está:

Path:

/mercadinho-jt/src/main/webapp/arquivos-produto

Location:

C:\DEV\PROJETOS\mercadinho-jt\src\main\webapp\arquivos-produto

Acabou dando certo dessa forma:

public String write(String baseFolder, MultipartFile file) {
        try {            
                    //String realPath = request.getServletContext().getRealPath("\\" + baseFolder);
                    String path = "C:\\DEV\\PROJETOS\\mercadinho-jt\\src\\main\\webapp\\arquivos-produto" + "\\" + file.getOriginalFilename();
                    file.transferTo(new File(path));
                    return baseFolder + "\\" + file.getOriginalFilename();

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

Sei que não é a melhor forma de se fazer, definindo o caminho. Mais pelo visto é realmente o caminho que é pego no request. Alguém sabe como posso corrigir isso..

Daniel, você afirma que dá erro ao executar o método file.transferTo(new File(path));, no entanto eu fiz os testes e usei o mesmo código da sua dúvida e gravou normal e até retornou a barra invertida, igual o resultado da sua variável path. Vendo a variável path String path = "C:\\DEV\\PROJETOS\\mercadinho-jt\\src\\main\\webapp\\arquivos-produto" de sua última postagem posso deduzir que sua pasta "arquivos-sumario" não está publicada no servidor, ou seja, você a criou manualmente nesse caminho que está na variável path. Pode confirmar isso?

Thiago, bom dia. Então criei a pasta da mesma forma que é mostrada no curso, ou seja, não fui lá na pasta do projeto e criei lá. Então o que acontece é que nessa linha:

String realPath = request.getServletContext().getRealPath("\"+baseFolder);

Acaba vindo dessa forma:

C:\DEV\PROJETOS\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\mercadinho-jt\arquivos-produto

Depois disso é concatenada a imagem que se eu deixar da forma como é mostrada no curso fica assim:

        String path = realPath + "\" + file.getOriginalFilename();

E o path acaba vindo dessa forma (observe a barra invertida)

C:\DEV\PROJETOS\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\mercadinho-jt\arquivos-produto/Tomate-destaque.jpg

Ai quando chega na linha:

 file.transferTo(new File(path));

Já cai na exception. Verifiquei isso debugando a aplicação, estou usando o eclipse Luna para fazer o curso. Gostaria de saber se o realPath quando é pego teria que vir dessa forma mesmo?

Obrigado!!

O mesmo está acontecendo comigo.

java.io.IOException: java.io.FileNotFoundException: C:\dev\projects\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\casadocodigo\arquivos-sumario\C:\Users\Starke\Desktop\fotos_isa.txt (A sintaxe do nome do arquivo, do nome do diretório ou do rótulo do volume está incorreta)

Alguém conseguiu solucionar ?

comigo está acontecendo a mesma coisa.

GRAVE: 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\SND14182\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\casadocodigo\arquivos-sumario\download.png (O sistema não pode encontrar o caminho especificado)] with root cause
java.io.FileNotFoundException: C:\Users\SND14182\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\casadocodigo\arquivos-sumario\download.png (O sistema não pode encontrar o caminho especificado)
    at java.io.FileOutputStream.open0(Native Method)
    at java.io.FileOutputStream.open(Unknown Source)

Criei a pasta conforme orientado no video, porém se eu entrar na url

C:\Users\SND14182\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\casadocodigo\

não existe a pasta "arquivos-sumario" somente "WEB-INF" e "META-INF"

Alguem que usa Windows conseguiu resolver isto? no video o instrutor resolve usando o "Clean" mas isto não funcionou aqui

Acabei de resolver criando a pasta "arquivos-sumario" na pasta temporaria =(. parece que o eclipse bugou e não criou automaticamente.