Upload em JSP

Fala galera,

to tentando a seculos fazer um upload de imagem e nao consigo.

meu jsp ta assim…

<%@page language="java" import="org.apache.commons.fileupload.*, java.util.*, java.io.*" %>
<%

    String codigo=request.getParameter("codigo");
    String caminhoTemp = "c:\\logos\\temp\\";
    String pasta = "c:\\logos\\final\\";

    if (FileUpload.isMultipartContent(request)) {
        DiskFileUpload upload = new DiskFileUpload();
        upload.setRepositoryPath(caminhoTemp);
        try {
            List items = upload.parseRequest(request);
            Iterator iter = items.iterator();
            while (iter.hasNext()) {
                FileItem item = (FileItem) iter.next();
                if (!item.isFormField()) {

                    //String nome = item.getName().toString();
                    String nome = codigo+".jpg";
                    String nomeArquivo = nome.substring(nome.lastIndexOf("\\") + 1);

                    out.write("nome do arquivo: " + nomeArquivo + "<br>");
                    out.write("Arquivo(s)<b> " + item.getName() + "</b> transferido(s)<br>");

                    File arquivo = new File(pasta + nomeArquivo);
                    item.write(arquivo);
                    out.write("Clique <a href=/upload/" + nomeArquivo + ">Aqui</a>. Para ver o resultado do upload");
                }
            }
        } catch (FileUploadException e) {
            out.write("Não foi possível efetivar o upload do arquivo - segue a causa do erro" + "<br>" + e.getMessage());
            e.printStackTrace();
        }
    }

%>

Nisso ele faz o upload CERTINHO!!
mas, quando mudo a pasta para uma da aplicacao, (ex: “…/imagens/”) ele da erro, dizendo que nao pode encontrar o diretorio.

alguem ai pode me dar uma ajuda?
ou alguem conhece uma maneira melhor???

abrç

Você está utilizando um caminho relativo, ele vai tentar aquele caminho em função do diretório corrente que é do servidor web e não sua aplicação.
Tente criar um new File(".") e exibir o absolutePath para você saber em qual diretorio você se encontra trabalhando ai você verá o porque do erro.

se vc utilizar o diretorio /imagens/ o app vai tentar salvar nesta pasta do seu servidor nao na pasta da aplicacao

por exemplo

sua aplicacao roda em /home/public_jsp/app/

para salvar suas imagens na pasta imagens da sua aplicacao voce teria que setar assim seu path

/home/public_jsp/app/imagens/

e nao assim

/imagens/

entendeu???

mas se eu salvar as imagens em uma pasta da minha aplicacao, ela vai ser zerada a cada deploy, certo?? isso nao pode acontecer x.x

eu estou salvando no c:\imagens\ , ta indo direitinho. Mas quando eu coloco na minha aplicacao um

<img src="file:\\\\\\c:\\imagens\\imagem.jpg">

ele nao abre a imagem. Alguem sabe porque?

Isso eh pq voce esta tentando acessar uma imagem do servidor pelo client side

voce tem que criar um Servlet ou JSP que carregue a imagem do server para o client

ex

seu servlet eh getIMG

voce digita lah getIMG?img=encrypted code

seu servlet ira buscar no banco de dados onde esta salvo sua imagem e retornara ela para voce

exemplo do servlet:

[code] protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

    FileInputStream input = new FileInputStream("ARQUIVO A SER LIDO DO SERVER");   
     byte[] buffer = new byte[1024]; // le o arquivo a cada 1kb  
     ServletOutputStream out = response.getOutputStream();  
     int read = 0;  
     while((read = input.read(buffer)) != -1){  

       out.write(buffer);  
       out.flush();  
     }  

     out.close();  


}  [/code]

Jonhkr, antes de tudo gostaria de agradecer a ajuda.

entao,
eu consegui abrir a imagem no IE, colocando a pasta de logo na mesma particao do meu tomcat.
ficou assim…

out.println("<img style=\"max-height: 70px;max-width: 350px;\" src=\"D:/logos/sampa.png\">");

mas quando abro no CHROME ou FF, ele nao abre a imagem de modo algum.

sabe como consertar isso?

quanto ao seu codigo, eu testei ele e se eu acesso no browser , vai normal, mas como eu coloco ele dentro da minha aplicacao? nao saquei essa parte :expressionless:

valeu!!!

Ja deu certo!!!

Valeu pela ajuda galera!
qualquer coisa eu volto :smiley: