Dateiupload mit POST über Sockets

narfist

Grünschnabel
Hallo liebe Forumgemeinde.

Ich lese hier immer sehr gerne mit und habe auch schon viele Antworten auf meine Fragen hier gefunden (sehr oft von Thomas Darimont - du hast meinen vollen Respekt!), nur leider komme ich nun nicht weiter und alles bereits im Web gefundene hilft mir nicht weiter.

Das Problem: Ich will regelmäßig meine Backups auf einen One-Klick-Hoster (share-online.biz) hochladen. Dort gibt es zu dem Upload auch eine API. Demnach funktioniert der Upload über POST und ist in zwei Teile geteilt. Der erste Teil klappt prima:

Java:
try {
				//Parameter POST
				String data = URLEncoder.encode("username", "UTF-8") + "=" + URLEncoder.encode(user, "UTF-8") + "&" +
				URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode(pass, "UTF-8");
				//Send data
				URL url = new URL("http://www.share-online.biz/upv3_session.php");
				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 temp = rd.readLine();
				session = temp.split(";")[0];
				server = "http://" + temp.split(";")[1];
				wr.close(); 
				rd.close(); 
			} catch (MalformedURLException e) {
				System.out.println("Share-Online-Session-URL falsch.");
			} catch (UnsupportedEncodingException e) {
				System.out.println("Kann username und password nicht encoden.");
			} catch (IOException e) {
			}
Danach steht dann in den Variablen server und session:
server = dl51-1.share-online.biz/upv3.php
session = GW63P9DEC

Damit kommt man dann auch zum zweiten Teil, bei dem man über POST die anfrage an den Server sendet:
Java:
try{
			int groesse = (int) new File(folder + "/" + file).length();
			String data = URLEncoder.encode("username", "UTF-8") + "=" + URLEncoder.encode(user, "UTF-8") + "&" +
			URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode(pass, "UTF-8") + "&" + 
			URLEncoder.encode("upload_session", "UTF-8") + "=" + URLEncoder.encode(session, "UTF-8") + "&" +
			URLEncoder.encode("chunk_no", "UTF-8") + "=" + URLEncoder.encode("1", "UTF-8") + "&" +
			URLEncoder.encode("chunk_number", "UTF-8") + "=" + URLEncoder.encode("1", "UTF-8") + "&" +
			URLEncoder.encode("filesize", "UTF-8") + "=" + groesse + "&" +
			URLEncoder.encode("fn", "UTF-8") + "=" + URLEncoder.encode(folder + "/" + file, "UTF-8") + "&" +
			URLEncoder.encode("finalize", "UTF-8") + "=" + URLEncoder.encode("1", "UTF-8");
			// Send data
			URL url = new URL(server);
			URLConnection conn = url.openConnection();
			conn.setDoOutput(true);
			OutputStreamWriter wr1 = new OutputStreamWriter(conn.getOutputStream());
			// schreibe die Parameter
			wr1.write(data);
			wr1.flush();
			StringBuffer answer = new StringBuffer();
			BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
			answer.append(reader.readLine());
			System.out.println("Answer: " + answer);
			wr1.close();
			reader.close();
			int port = 80;
			InetAddress addr = InetAddress.getByName(server.split("/")[2]);
			Socket socket = new Socket(addr, port);

			// File To Upload
			File theFile = new File(folder + "/" + file);
			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());
			raw.write(theData);
			raw.flush( );
			BufferedReader rd = new BufferedReader(new
			InputStreamReader(socket.getInputStream()));
			String line;
			while ((line = rd.readLine()) != null) {
			System.out.println(line);
			}
			raw.close();
			socket.close();
			} catch (Exception e) { System.out.println(e.toString()); }
Ergibt dann folgende Ausgabe: Answer: *** EXCEPTION md5 not fetchable - 08-19-2010, 6:08 pm ***

Die datei existiert und leserechte sind ausreichend gesetzt. Ich weiß leider nicht mehr weiter wie ich 1. die POST-Parameter und 2. gleichzeitig die Datei hochladen kann.

Ich hoffe ich habe mich verständlich ausgedrückt und jemand kann mir helfen.

Danke schon mal
 
Zurück