Urgente - file upload(não é uma pergunta COMUM, confira)

8 respostas
fr3akoutTotal

Pessoal preciso fazer um http client pra enviar via POST um arquivo xml para o meu servlet em java.

Eu pesquisei na internet, e só encontrei soluções que usam httpclient da apache.

O problema é que o sistema no qual desenvolvo não me deixa IMPORTAR BIBLIOTECAS, ou seja preciso criar um client que use apenas o que vem na JDK 1.4(não pode ser nada da 1.5).

O código mais perto disso que eu consegui foi esse abaixo:

try {
        // Construct data
        String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8");
        data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8");
    
        // Send data
        URL url = new URL("http://hostname:80/cgi");
        URLConnection conn = url.openConnection();
        conn.setDoOutput(true);
        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
        wr.write(data);
        wr.flush();
    
        // Get the response
        BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line;
        while ((line = rd.readLine()) != null) {
            // Process line...
        }
        wr.close();
        rd.close();
    } catch (Exception e) {
    }

porém preciso adaptar este código para que envie um ARQUIVO.xml e não o conteudo do XML como uma string.

ajuda por favor!!

agradeço muito desde já!

-dm

8 Respostas

gui_sv

a propria apache tem o commons file upload … tem exemplo e tudo mais no site

fr3akoutTotal

mas eu nao posso utilizar bibliotecas como eu disse no primeiro post deste topico…tenho que fazer de modo nativo…soh com as libs do java

valeuz mesmo assim

fr3akoutTotal

mas nao posso utilizar bibliotecas, tneho que fazer de modo nativo…como eu disse acima

valeuz mesmo assim…

gui_sv

só com java ntvo eu nao sei … :frowning:

blza

sergiotaborda

fr3akoutTotal:
Pessoal preciso fazer um http client pra enviar via POST um arquivo xml para o meu servlet em java.

Eu pesquisei na internet, e só encontrei soluções que usam httpclient da apache.

O problema é que o sistema no qual desenvolvo não me deixa IMPORTAR BIBLIOTECAS, ou seja preciso criar um client que use apenas o que vem na JDK 1.4(não pode ser nada da 1.5).

O código mais perto disso que eu consegui foi esse abaixo:

try {
        // Construct data
        String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8");
        data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8");
    
        // Send data
        URL url = new URL("http://hostname:80/cgi");
        URLConnection conn = url.openConnection();
        conn.setDoOutput(true);
        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
        wr.write(data);
        wr.flush();
    
        // Get the response
        BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line;
        while ((line = rd.readLine()) != null) {
            // Process line...
        }
        wr.close();
        rd.close();
    } catch (Exception e) {
    }

porém preciso adaptar este código para que envie um ARQUIVO.xml e não o conteudo do XML como uma string.

ajuda por favor!!

Não ha diferença prática. DO lado do servidor simplesmente leia o parametro e converta para arquivo.
O HTTP nunca envia o arquivo, sempre converte para texto ( pois é um protocolo baseado em texto).
O que acontece no FileUploads é que vc define o post com um outro tipo de encoding e assim o browser envia o request de outra forma que o FileUploads sabe ler. Mas isso é uma necessidade que vc pode evitar. Sobretudo se o seu cliente é limitado.

fr3akoutTotal

sergiotaborda:
fr3akoutTotal:
Pessoal preciso fazer um http client pra enviar via POST um arquivo xml para o meu servlet em java.

Eu pesquisei na internet, e só encontrei soluções que usam httpclient da apache.

O problema é que o sistema no qual desenvolvo não me deixa IMPORTAR BIBLIOTECAS, ou seja preciso criar um client que use apenas o que vem na JDK 1.4(não pode ser nada da 1.5).

O código mais perto disso que eu consegui foi esse abaixo:

try {
        // Construct data
        String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8");
        data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8");
    
        // Send data
        URL url = new URL("http://hostname:80/cgi");
        URLConnection conn = url.openConnection();
        conn.setDoOutput(true);
        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
        wr.write(data);
        wr.flush();
    
        // Get the response
        BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line;
        while ((line = rd.readLine()) != null) {
            // Process line...
        }
        wr.close();
        rd.close();
    } catch (Exception e) {
    }

porém preciso adaptar este código para que envie um ARQUIVO.xml e não o conteudo do XML como uma string.

ajuda por favor!!

Não ha diferença prática. DO lado do servidor simplesmente leia o parametro e converta para arquivo.
O HTTP nunca envia o arquivo, sempre converte para texto ( pois é um protocolo baseado em texto).
O que acontece no FileUploads é que vc define o post com um outro tipo de encoding e assim o browser envia o request de outra forma que o FileUploads sabe ler. Mas isso é uma necessidade que vc pode evitar. Sobretudo se o seu cliente é limitado.

do lado do servidor eu fiz funcionar, agora falo do lado do cliente, como mandar um arquivo xml em stream pelo http post, vc saberia me dar ume xmeplo de como fazer? pq eu nem faço idéia, esse código acima eu tirei do www.exampledepot.com, segue abaixo minha rotina do lado servidor que atualmente funciona direitinho:

InputStream xml = null;
	BufferedReader br = null;
	StringBuffer xmlBuffer = new StringBuffer();
	String line = null;
	File readyXML = null;
	
	try {
		xml = request.getInputStream();
		br = new BufferedReader(new InputStreamReader(xml));
		
		while((line = br.readLine()) != null) {
			xmlBuffer.append(line);
		}
	} catch(IOException e) {
		e.printStackTrace();
	}
	
	try {
		BufferedWriter out = new BufferedWriter(new FileWriter(TAGSHOP_REQUEST_XML));
		out.write(xmlBuffer.toString());
		out.close();
		
		readyXML = new File(TAGSHOP_REQUEST_XML);
	} catch (IOException e) {
		e.printStackTrace();
	}
	//===============================================================
fr3akoutTotal

po, ninguem?

sergiotaborda
fr3akoutTotal:
sergiotaborda:

Não ha diferença prática. DO lado do servidor simplesmente leia o parametro e converta para arquivo.
O HTTP nunca envia o arquivo, sempre converte para texto ( pois é um protocolo baseado em texto).
O que acontece no FileUploads é que vc define o post com um outro tipo de encoding e assim o browser envia o request de outra forma que o FileUploads sabe ler. Mas isso é uma necessidade que vc pode evitar. Sobretudo se o seu cliente é limitado.

do lado do servidor eu fiz funcionar, agora falo do lado do cliente, como mandar um arquivo xml em stream pelo http post, vc saberia me dar ume xmeplo de como fazer? pq eu nem faço idéia, esse código acima eu tirei do www.exampledepot.com, segue abaixo minha rotina do lado servidor que atualmente funciona direitinho:

[/quote]

Ora, o codigo do lado do cliente é aquele lá que vc mesmo colocou.
Só que em vez de

OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());  
wr.write(data);  
 wr.flush();

Vc faz :

InputStream fileInputStream = new FileInputStream(file);
 OutputStream out =  conn.getOutputStream());  

 // copia do input para o output (upload)
 final byte[] buffer = new byte[1024 * 4]; //4 Kb
 int n = 0;
 while (-1 != (n = fileInputStream.read(buffer))) {
			out.write(buffer, 0, n);
 }
 out.flush();
		
out.close();
fileInputStream .close();
Criado 30 de setembro de 2008
Ultima resposta 30 de set. de 2008
Respostas 8
Participantes 3