Pessoal, estou usando o tipo File para pegar um arquivo na tela, e fazer upload do mesmo… na minha máquina funciona, só que quando mudo de máquina ele da erro de “Não encontra arquivo” ele le na página jsp, pega na servlet e envia o caminho completo…
Queria que enviasse o caminho completo do arquivo e não só o nome… existe alguma função que pega o valor do input e manda o caminho?
JSP
<%@pageimport="br.com.simcard.Upload"%><%@pagelanguage="java"contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type"content="text/html; charset=ISO-8859-1"><title>SIMCards</title></head><styletype=text/css>.canto{top:15px;}</style><body><center><formname="form1"id="form1"action="ServletUpload"method="post"enctype="multipart/form-data"><br><inputtype="hidden"name="hiddenfield1"value="ok">ArquivoparaUpload:<inputtype="file"size="50"name="file1"title="Clique para procurar arquivo"><br><br><buttontitle="Clique para carregar arquivo"type="submit"value="Upload"onclick="if(document.getElementById('spoiler') .style.display=='none') {document.getElementById('spoiler') .style.display=''}else{document.getElementById('spoiler') .style.display='none'}">Upload</button><divid="spoiler"style="display:none"><br><br>Aguarde,carregando...<br>Issopodelevaralgunsminutos.<br></div><br><br/><ahref='index.jsp'>Voltar</a><br></form><br><divclass="canto"><imgsrc="./img/portoSeguro.jpg"border="0"width="310"height="434"></div></center></body></html>
O caminho completo do arquivo não pode ser enviado por um por razões de segurança. Além disso, não faz sentido a aplicação Web saber o path completo porque normalmente não deve ter acesso a esse diretório. Por exemplo, digamos que você tenha uma aplicação Web hospedada no Google em Linux querendo saber o path completo de um arquivo que está em um celular rodando Symbian. Faz algum sentido a aplicação saber o path completo ?
R
rof20004
E se voce mudar a pasta onde o arquivo se econtra, depois de ter salvo a informacao ? é esse erro que esta acontecendo com voce acredito, acho que voce pode somente pegar o nome do arquivo, e arquivo esse salvo no banco de dados.
P
Pacato
Eu sei que não faz sentido e tal... que são questões de segurança...
mas não encontrei outro jeito (simples) de fazer um upload....
rof... é assim.. vou "subir" um arquivo excel, ler suas colunas e gravá-las no BD... no IE ta redondo, pq ele não tem essa verificação, mas se for uma versão mais atual do IE, ele le errado....
Tem alguma maneira de pegar esse valor do input e converte-lo em string?
Tava pensando em usar o JChooser, como uma função, ai eu pego a string do nome com getAbsolutePath... vcs podem me ajudar com isso?
Tio, como é que saber o caminho completo do arquivo vai resolver seu problema de upload? Que eu saiba, a máquina que recebe o arquivo não deveria ter acesso nenhum à sua máquina. Se o arquivo está tendo problemas para subir, alguma coisa está errada no seu código de upload.
E
entanglement
Se em uma aplicação Web você estiver usando Swing, você está fazendo uma _______ muito errada porque está confundindo os conceitos de aplicação Web e aplicação cliente. Esse é o típico exemplo de “puxa, mas funcionava na minha máquina…”
P
Pacato
é que estou usando o filaupload… então se passar o caminho do arquivo é o que importa… pois assim ele irá ler…
na verdade seria melhor dizer leitura do arquivo… pois vou pegar os dados e gravar no BD, e não o arquivo propriamente dito
E
entanglement
Amigo, tenho de lhe explicar o seguinte. Quando em uma aplicação Web você tem um campo de entrada (pelo menos é assim que aparece no HTML gerado, use um View Source no seu browser para verificar isso), o browser apresenta um botão que lhe permite escolher o arquivo. Na aplicação web, deve haver uma forma de receber o arquivo que subiu.
Normalmente as pessoas usam uma biblioteca como o Jakarta Apache Commons Upload para fazer seus uploads, mas você precisa ver um exemplo de aplicação que faça isso. Não fique chutando, como é o que você está tentando fazer.
Procure por “exemplo fileupload jsp” na Internet.
P
Pacato
o meu está assim…
com o Jakarta… só que ele tem limitações, ou melhor, os Browser possuem aquela segurança e não da para selecionar o caminho do arquivo… pois ele recebe no tipo File, uma string com o caminho…
eu não estou tentando chutar… quero só burlar isso… usando o jfilechooser e pegando o caminho do arquivo e passando pelo servlet… .e não jogar direto na classe…
E
entanglement
Bom, se você quer burlar alguma coisa, então vá para outro fórum, não este.
Que eu saiba, você pode fazer upload com Flash ( http://code.google.com/p/swfupload/ ), que é o que é usado naqueles web mails que permitem pegar vários arquivos de uma vez só.
Uma forma de você fazer upload e saber o nome completo do arquivo é disponibilizar uma applet Java assinada, mas não recomendaria o seu uso, simplesmente porque isso provavelmente não vai funcionar (por exemplo, no MacOSX o Java está desabilitado no Safari até que a Oracle crie uma atualização que corrija uma falha de segurança que existe no plugin do Java para browsers - applets.).
E
entanglement
Outra coisa, amigo: se você está usando qualquer classe de javax.swing.* em uma aplicação Web, está fazendo uma ______ besteira. Eu estou dizendo para você e estou repetindo: se você fosse meu funcionário, iria mandar você de volta para a escola, já que está confundindo conceitos Web e conceitos de aplicação desktop de maneira grotesca.
P
Pacato
não estou usando nada de swing… só agora com o jfile…
Eu quero usar o Jfilechooser no mesmo jeito que usaria um flash… só que deixaria tudo em java…
não fique nervoso por besteiras…
R
rof20004
Agora sim ficou mais claro =D, mas pacato, ca entre nos, acho que c ta confundindo um pouco as nossas cabecas, hehehe, aparentemente voce ta misturando nomemclaturas web com swing. Faz assim, confirma, o que voce quer: “Pegar um arquivo no excel, e atravez da sua aplicacao web, ler esse arquivo, pegar o conteudo desse arquivo e salvar numa tabela especifica ?”
Flw
P
Pacato
Exato rof...
estou misturando agora com swing.. sei que é porco isso... mas não to vendo maneira de pegar os caminhos do arquivo... pois o servlet eu pego pelo file.getName, assim passo para a classe abaixo para ler o arquivo...
packagebr.com.simcard;importjava.io.File;importjava.io.IOException;importjava.sql.SQLException;importjavax.servlet.http.HttpServletResponse;importjxl.read.biff.BiffException;publicclassUpload{publicbooleananexos(Stringlogin,Stringcaminho,HttpServletResponseresponse)throwsException,IOException,BiffException,ClassNotFoundException,SQLException{if((caminho!=null)){Filefile=newFile(caminho);System.out.println(file);if(file.toString().contains("TELECOM")){//LeituraArquivoPOI vr = new LeituraArquivoPOI(file, login);VerificarRegistroTelecomvr=newVerificarRegistroTelecom(file,login);}elseif(file.toString().contains("CTR")||file.toString().contains("NANOCOMM")||file.toString().contains("TMPORTO")){VerificarRegistroCtrvr=newVerificarRegistroCtr(file,login);}elseif(file.toString().contains("GATEWAY")){VerificarRegistroGatevr=newVerificarRegistroGate(file,login);}else{System.out.println("Nome do arquivo inválido");returnfalse;}}returntrue;}}
P
Pacato
sei que o entan vai ficar bravo, mas foi o que consegui....
meu jsp:
<%@pagelanguage="java"contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type"content="text/html; charset=ISO-8859-1"><title>Pesquisar</title></head><body><center><formname="form"id="form"action="ServletTeste"method="post">
TESTES
<br><br><br><br><inputtype="submit"value="Pesquisar"/><br><br><br><ahref='index.jsp'>Voltar</a><br><br></form></center></body></html>
Meu servlet:
packageservlet.br.com.simcard;importjava.io.IOException;importjava.io.PrintWriter;importjava.sql.SQLException;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;importjxl.read.biff.BiffException;importbr.com.simcard.FileChooser;importbr.com.simcard.Upload;importbr.com.simcard.dao.PesquisaDAO;@WebServlet("/ServletPesquisa")publicclassServletTesteextendsHttpServlet{privatestaticfinallongserialVersionUID=1L;publicServletTeste(){super();}protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{}protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType("text/html");PrintWriterout=response.getWriter();HttpSessionsession=request.getSession();Stringlogin=(String)session.getAttribute("loginUsuario");FileChooserarquivo=newFileChooser();try{if(newUpload().anexos(login,arquivo.path(),response)){out.println("<html>");out.println("<head>");out.println("</head>");out.println("<body>");out.println("<center>");out.println("<br>");out.println("Arquivo gravado com Sucesso!");out.println("</center>");out.println("</body>");out.println("</html>");}else{out.println("<html>");out.println("<head>");out.println("</head>");out.println("<body>");out.println("<center>");out.println("<br>");out.println("Erro Interno");out.println("</center>");out.println("</body>");out.println("</html>");out.println("<html>");out.println("<head>");out.println("</head>");out.println("<body>");out.println("<center>");out.println("<br/>"+"<br/>"+"<br/>"+"<a href='pesquisaUnitaria.jsp'>Voltar</a>");out.println("</center>");out.println("</body>");out.println("</html>");}}catch(BiffExceptione){// TODO Auto-generated catch blocke.printStackTrace();}catch(ClassNotFoundExceptione){// TODO Auto-generated catch blocke.printStackTrace();}catch(SQLExceptione){// TODO Auto-generated catch blocke.printStackTrace();}catch(Exceptione){// TODO Auto-generated catch blocke.printStackTrace();}}}
não vou colocar como resolvido pois quero tentar fazer algo mais limpo que isso... mas como é uma aplicação que será utilizada só aqui na minha area não será anti ético
B
bezier_curve
Teste sua aplicação Web de uma outra máquina - por exemplo, instale-a no seu servidor de teste. Você vai perceber uma coisa muito bizarra - o JFileChooser, se ele aparecer, vai aparecer no servidor, não no seu browser. Você começou a entender por que é que não se usa Swing em aplicações Web?
P
Pacato
Eu sei…
Mas todo mundo fala isso, mas ninguem fala o que eu posso fazer para arrumar esse problema na web
P
Pacato
eu estou fazendo o upload (agora de verdade, não só lendo o arquivo) e leio o caminho do servidor…
Alguem pode me ajudar como faço para tirar o caminho completo do IE?
pois ele não manda só o nome e extensão do arquivo…
P
Pacato
resolvi:
Stringcaminho=null;if(fileItem.getName().contains("\\")){Stringcaminho2=fileItem.getName().substring(fileItem.getName().lastIndexOf("\\")+1);FileuploadedFile=newFile("./arquivoUpload/"+caminho2);fileItem.write(uploadedFile);caminho="./arquivoUpload/"+caminho2;}else{// SE FOR IE PASSAR O CAMINHO2 QUE VIRA SÓ O NOME DO AQRQUIVOFileuploadedFile=newFile("./arquivoUpload/"+fileItem.getName());fileItem.write(uploadedFile);caminho="./arquivoUpload/"+fileItem.getName();}
P
Pacato
Esse servlet recebe um tipo arquivo, grava no "Servidor" e passa o caminho para a classe ler o arquivo (File com o caminho dele)
packageservlet.br.com.simcard;importjava.io.File;importjava.io.IOException;importjava.io.PrintWriter;importjava.util.Iterator;importjava.util.List;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;importorg.apache.commons.fileupload.FileItem;importorg.apache.commons.fileupload.FileItemFactory;importorg.apache.commons.fileupload.FileUploadException;importorg.apache.commons.fileupload.disk.DiskFileItemFactory;importorg.apache.commons.fileupload.servlet.ServletFileUpload;importbr.com.simcard.Upload;@WebServlet("/ServletUpload")publicclassServletUploadextendsHttpServlet{privatestaticfinallongserialVersionUID=1L;publicServletUpload(){super();}publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{response.setContentType("text/html");PrintWriterout=response.getWriter();booleanisMultipartContent=ServletFileUpload.isMultipartContent(request);if(!isMultipartContent){out.println("<html>");out.println("<head>");out.println("</head>");out.println("<body>");out.println("<center>");out.println("<br>");out.println("Erro no Nome do Arquivo<br/>");out.println("</center>");out.println("</body>");out.println("</html>");return;}FileItemFactoryfactory=newDiskFileItemFactory();ServletFileUploadupload=newServletFileUpload(factory);Filedir=newFile("arquivoUpload");if(dir.mkdir()){System.out.println("Diretorio criado com sucesso!");}else{System.out.println("Erro ao criar diretorio!");}try{List<FileItem>fields=upload.parseRequest(request);Iterator<FileItem>it=fields.iterator();while(it.hasNext()){out.println("<tr>");FileItemfileItem=it.next();//boolean isFormField = fileItem.isFormField();if(fileItem.getName()!=null){try{HttpSessionsession=request.getSession();Stringlogin=(String)session.getAttribute("loginUsuario");Stringcaminho=null;if(fileItem.getName().contains("\\")){Stringcaminho2=fileItem.getName().substring(fileItem.getName().lastIndexOf("\\")+1);FileuploadedFile=newFile("./arquivoUpload/"+caminho2);fileItem.write(uploadedFile);caminho="./arquivoUpload/"+caminho2;}else{// SE FOR IE PASSAR O CAMINHO2 QUE VIRA SÓ O NOME DO AQRQUIVOFileuploadedFile=newFile("./arquivoUpload/"+fileItem.getName());fileItem.write(uploadedFile);caminho="./arquivoUpload/"+fileItem.getName();}if(newUpload().anexos(login,caminho,response)){out.println("<html>");out.println("<head>");out.println("</head>");out.println("<body>");out.println("<center>");out.println("<br>");out.println("Arquivo gravado com Sucesso!");out.println("</center>");out.println("</body>");out.println("</html>");}else{out.println("<html>");out.println("<head>");out.println("</head>");out.println("<body>");out.println("<center>");out.println("<br>");out.println("Erro ao enviar arquivo!<br><br> Nome e/ou Tipo Inválido(s)");out.println("</center>");out.println("</body>");out.println("</html>");}out.println("<html>");out.println("<head>");out.println("</head>");out.println("<body>");out.println("<center>");out.println("<br/>"+"<br/>"+"<br/>"+"<a href='uploadArquivo.jsp'>Voltar</a>");out.println("</center>");out.println("</body>");out.println("</html>");out.close();}catch(Exceptione){e.printStackTrace();}}}out.println("</table>");}catch(FileUploadExceptione){e.printStackTrace();out.println("<html>");out.println("<head>");out.println("</head>");out.println("<body>");out.println("<center>");out.println("<br>");out.println("Erro Interno");out.println("</center>");out.println("</body>");out.println("</html>");}out.println("<html>");out.println("<head>");out.println("</head>");out.println("<body>");out.println("<center>");out.println("<br>");out.println("Erro Interno");out.println("</center>");out.println("</body>");out.println("</html>");out.println("<html>");out.println("<head>");out.println("</head>");out.println("<body>");out.println("<center>");out.println("<br/>"+"<br/>"+"<br/>"+"<a href='uploadArquivo.jsp'>Voltar</a>");out.println("</center>");out.println("</body>");out.println("</html>");out.close();}}
CLASSE UPLOAD QUE RECEBE O FILE
importjava.io.File;importjava.io.IOException;importjava.sql.SQLException;importjavax.servlet.http.HttpServletResponse;importjxl.read.biff.BiffException;publicclassUpload{publicbooleananexos(Stringlogin,Stringcaminho,HttpServletResponseresponse)throwsException,IOException,BiffException,ClassNotFoundException,SQLException{if((caminho!=null)){Filefile=newFile(caminho);if(file.toString().contains("TELECOM")){// LeituraArquivoPOI vr = new LeituraArquivoPOI(file, login);VerificarRegistroTelecomvr=newVerificarRegistroTelecom(file,login);}elseif(file.toString().contains("CTR")||file.toString().contains("NANOCOMM")||file.toString().contains("TMPORTO")){VerificarRegistroCtrvr=newVerificarRegistroCtr(file,login);}elseif(file.toString().contains("GATEWAY")){VerificarRegistroGatevr=newVerificarRegistroGate(file,login);}else{System.out.println("Nome do arquivo inválido");returnfalse;}}returntrue;}}