Blog Suche

Kategorien
Letzten Einträge
Letzten Kommentare
<< April, 2009 >>
SMDMDFS
1234
567891011
12131415161718
19202122232425
2627282930
Outa Links
Downloads
Applikationen
Archiv
Foto Alben
RSS

Powered by
BlogCFM v1.11

18 November 2005
HTTP Multipart Post mit Java
Oder wie man mit Java Dateien posten kann

Wer automatisiert Dateien zu seinen Server senden möchte, hat es unter Windows nicht ganz einfach. Für das Versenden einer Datei über Port 80 hat Windows leider nichts an Bord. Ein kleines Java Programm was über DOS einfach angesprochen werden kann ist aber schnell umgesetzt. Hier ein Beispiel für ein POST einer test.jpg zu einen entfernten Server:

/**
 * @author Günter Dillenberg
 * Upload  multipart/form-data via HTTP POST
 */

import java.io.*;
import java.net.*;

public class UploadExample
{

// Construct data

public static void main (String args[]) {
try{
String hostname = "upload.meinserver.com";
int port = 80;
InetAddress addr = InetAddress.getByName(hostname);
Socket socket = new Socket(addr, port);

// Send header
String path = "/do_upload.cfm";

// File To Upload
File theFile = new File("C:/test.jpg");


System.out.println ("size: " + (int) theFile.length());
DataInputStream fis = new DataInputStream(new BufferedInputStream(new
FileInputStream(theFile)));
byte[] theData = new byte[(int) theFile.length( )];

fis.readFully(theData);
fis.close();


DataOutputStream raw = new
DataOutputStream(socket.getOutputStream());
Writer wr = new OutputStreamWriter(raw);

String command =
      "--dill\r\n"
    + "Content-Disposition: form-data; name=\"FiletoUpload\"; filename=\""
    + theFile.getName() + "\"\r\n"
    + "Content-Type: image/pjpeg\r\n"
    + "\r\n";

String trail = "\r\n--dill--\r\n";

String header =
 "POST "+path+" HTTP/1.0\r\n"
 + "Accept: */*\r\n"
 + "Referer: http://localhost\r\n"
 + "Accept-Language: de\r\n"
 + "Content-Type: multipart/form-data; boundary=dill\r\n"
 + "User_Agent: TESTAGENT\r\n"
 + "Host: upload.meinserver.com\r\n"
 + "Content-Length: " + ((int) theFile.length() + command.length() + trail.length()) + "\r\n"
 + "Connection: Keep-Alive\r\n"
 + "Pragma: no-cache\r\n"
 + "\r\n";

wr.write(header);
wr.write(command);

wr.flush();
raw.write(theData);
raw.flush( );
wr.write("\r\n--dill--\r\n");
wr.flush( );

BufferedReader rd = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
System.out.println(line);
}
wr.close();
raw.close();


socket.close();
} catch (Exception e) { System.out.println(e.toString()); }

}
}

 

 

 

Eingetragen von gd at 4:02 PM | Link | 2 Kommentare
Benachrichtigungs Optionen

Für diesen Eintrag haben Sie keine Benachrichtigungsfunktion aktiviert oder Sie sind nicht angemeldet. Zum Login/ Registrierung .

Re: HTTP Multipart Post mit Java
Hallo Herr Günter Dillenberg,

vielen Dank für ihr Beispiel. Sie haben mir damit sehr weitergeholfen. Leider sind im Netz Beispielcode für
Datei-Uploads nur sehr spärlich gesät. Aber eine Bitte habe ich da noch. Konnten Sie mir ein Beispiel zukommen
lassen, weitere Inputparameter mit dem Upload mitzusenden?

Vielen Dank schon mal im Voraus,

Sukoor
Eingetragen von sukoor on December 29, 2005 at 12:59 PM

Re: HTTP Multipart Post mit Java
Um weitere Inputparameter mit zu übergeben muss der "String command" erweitert werden:

String command =
"--dill\r\n"
+ "Content-Disposition: form-data; name=\"FiletoUpload\"; filename=\""
+ theFile.getName() + "\"\r\n"
+ "Content-Type: image/pjpeg\r\n"
+ "\r\n";

// weitere Formdaten hier ein Inputfeld mit dem Wert "inputfeld1 inhalt"
"--dill\r\n"
+ "Content-Disposition: form-data; name=\"inputfeld1\";
+ "inputfeld1 inhalt";
+ "\r\n";

// weitere Formdaten hier ein Inputfeld mit dem Wert "inputfeld2 inhalt2"
"--dill\r\n"
+ "Content-Disposition: form-data; name=\"inputfeld1\";
+ "inputfeld2 inhalt2";
+ "\r\n";

Hoffe geholfen zu haben.
Eingetragen von Günter Dillenberg on December 29, 2005 at 4:08 PM

Kommentare wurden deaktiviert in diesem Posting.