Veröffentlicht von & unter ColdFusion.

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()); }

}
}