Pegar o caminho completo do arquivo [RESOLVIDO]

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 ?

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.

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?

[code]
<%@ page import =“br.com.simcard.Upload” %>
<%@ page import =“javax.swing.JOptionPane” %>
<%@ page import =“javax.swing.JFileChooser” %>
<%@ page import =“javax.swing.JFrame” %>

<%@ page language=“java” contentType=“text/html; charset=ISO-8859-1” pageEncoding=“ISO-8859-1”%>

SIM Cards .canto { top: 15px; }
Arquivo para Upload :

Upload


Aguarde, carregando...
Isso pode levar alguns minutos.


Voltar

[/code]

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.

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…”

é 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

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.

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…

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.).

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.

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…

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

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…

[code]
package br.com.simcard;

import java.io.File;
import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.http.HttpServletResponse;

import jxl.read.biff.BiffException;

public class Upload {

public boolean anexos(String login, String caminho, HttpServletResponse response)
		throws Exception, IOException, BiffException,
		ClassNotFoundException, SQLException {

	if ((caminho != null)) {

		File file = new File(caminho);
		System.out.println(file);
		if (file.toString().contains("TELECOM")) {
			  
			//LeituraArquivoPOI vr = new LeituraArquivoPOI(file, login);
			VerificarRegistroTelecom vr = new VerificarRegistroTelecom(file, login);
			  
		} else if (file.toString().contains("CTR")
				|| file.toString().contains("NANOCOMM")
				|| file.toString().contains("TMPORTO")) {

			VerificarRegistroCtr vr = new VerificarRegistroCtr(file, login);
	
		} else if (file.toString().contains("GATEWAY")) {
				
			VerificarRegistroGate vr = new VerificarRegistroGate(file, login);

	} else {
			System.out.println("Nome do arquivo inválido");
			return false;
		}
	}
	return true;
}

}[/code]

sei que o entan vai ficar bravo, mas foi o que consegui…

meu jsp:

<%@ page language="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>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Pesquisar</title>
</head>

<body> 
	<center>
	<form name="form" id="form" action="ServletTeste" method="post">
	
TESTES
	<br>
	<br>
	<br>
	<br>
	<input type="submit" value="Pesquisar" />
	<br>
	<br>
	<br>
    <a href='index.jsp'>Voltar</a>
    <br>
    <br>
	</form>
		
	</center>	
</body>
</html>[/code]


Meu servlet:

[code]package servlet.br.com.simcard;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import jxl.read.biff.BiffException;

import br.com.simcard.FileChooser;
import br.com.simcard.Upload;
import br.com.simcard.dao.PesquisaDAO;

@WebServlet("/ServletPesquisa")
public class ServletTeste extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public ServletTeste() {
		super();

	}

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();

		HttpSession session = request.getSession();
		String login = (String) session.getAttribute("loginUsuario");
	
		FileChooser arquivo = new FileChooser();

		
		try {
		
			if (new Upload().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 (BiffException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

a classe FileChooser para pegar o caminho:

[code]package br.com.simcard;

import javax.swing.JFileChooser;

public class FileChooser {
public String path() {
String caminho = null;
JFileChooser arquivo = new JFileChooser();
int retorno = arquivo.showOpenDialog(null);
if (retorno == JFileChooser.APPROVE_OPTION) {
System.out.println(arquivo.getSelectedFile().getAbsolutePath());
caminho = arquivo.getSelectedFile().getAbsolutePath();
} else {
System.out.println(“não abriu”);
}
return caminho;
}
}
[/code]

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

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?

Eu sei…

Mas todo mundo fala isso, mas ninguem fala o que eu posso fazer para arrumar esse problema na web

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…

resolvi:

[code]
String caminho = null;

					if(fileItem.getName().contains("\\")){   
			            String caminho2 = fileItem.getName().substring(fileItem.getName().lastIndexOf("\\") + 1);   
						File uploadedFile = new File("./arquivoUpload/"+caminho2);
						fileItem.write(uploadedFile);
						caminho = "./arquivoUpload/"+caminho2;
						
			        }else{   
						// SE FOR IE PASSAR O CAMINHO2 QUE VIRA SÓ O NOME DO AQRQUIVO
						File uploadedFile = new File("./arquivoUpload/"+fileItem.getName());
						fileItem.write(uploadedFile);
						caminho = "./arquivoUpload/"+fileItem.getName(); 
			        }  [/code]

Esse servlet recebe um tipo arquivo, grava no “Servidor” e passa o caminho para a classe ler o arquivo (File com o caminho dele)

[code]package servlet.br.com.simcard;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import br.com.simcard.Upload;

@WebServlet("/ServletUpload")
public class ServletUpload extends HttpServlet{
private static final long serialVersionUID = 1L;

public ServletUpload() {
	super();
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
		throws IOException {
	response.setContentType("text/html");
	PrintWriter out = response.getWriter();

	boolean isMultipartContent = 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;
	}

	FileItemFactory factory = new DiskFileItemFactory();
	ServletFileUpload upload = new ServletFileUpload(factory);

	File dir = new File("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>");

			FileItem fileItem = it.next();
			//boolean isFormField = fileItem.isFormField();
			if (fileItem.getName() != null) {
				
				try {
									
					HttpSession session = request.getSession();
					String login = (String) session.getAttribute("loginUsuario");
					String caminho = null;
					
					if(fileItem.getName().contains("\\")){   
			            String caminho2 = fileItem.getName().substring(fileItem.getName().lastIndexOf("\\") + 1);   
						File uploadedFile = new File("./arquivoUpload/"+caminho2);
						fileItem.write(uploadedFile);
						caminho = "./arquivoUpload/"+caminho2;
						
			        }else{   
						// SE FOR IE PASSAR O CAMINHO2 QUE VIRA SÓ O NOME DO AQRQUIVO
						File uploadedFile = new File("./arquivoUpload/"+fileItem.getName());
						fileItem.write(uploadedFile);
						caminho = "./arquivoUpload/"+fileItem.getName(); 
			        }  

				
					if (new Upload().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 (Exception e) {
					e.printStackTrace();
					
				}

			}

		}
		out.println("</table>");
	} catch (FileUploadException e) {
		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();
}

}
[/code]

CLASSE UPLOAD QUE RECEBE O FILE

import java.io.File;
import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.http.HttpServletResponse;

import jxl.read.biff.BiffException;

public class Upload {

	public boolean anexos(String login, String caminho,
			HttpServletResponse response) throws Exception, IOException,
			BiffException, ClassNotFoundException, SQLException {

		if ((caminho != null)) {

			File file = new File(caminho);

			if (file.toString().contains("TELECOM")) {

				// LeituraArquivoPOI vr = new LeituraArquivoPOI(file, login);
				VerificarRegistroTelecom vr = new VerificarRegistroTelecom(
						file, login);

			} else if (file.toString().contains("CTR")
					|| file.toString().contains("NANOCOMM")
					|| file.toString().contains("TMPORTO")) {

				VerificarRegistroCtr vr = new VerificarRegistroCtr(file, login);

			} else if (file.toString().contains("GATEWAY")) {

				VerificarRegistroGate vr = new VerificarRegistroGate(file,
						login);

			} else {
				System.out.println("Nome do arquivo inválido");
				return false;
			}
		}
		return true;
	}
}