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