Billie
Erfahrenes Mitglied
Ich hab ein Programm geschrieben, was eigentlich genau das erledigt... du brauchst nur ein PHP Skript, welches dir die Datei am Server entgegen nimmt.
In PHP würdest du bei phpinfo() die Variablen $_FILES["upload_file"] und $_POST["feld"] sehen. Hier noch die Methode, mit welcher ich mein boundary generiere:
lg Billie
[edit]Hab den Code für das Vekleinern des Bildes entfernt, bei mir war die Vorgabe Bild hat eine max. Höhe/Breite von 400px und wird automatisch verkleinert und dann erst zum Server geschieckt. Wenn du das Ganze als Applet realisierst, gibt es theoretisch keine Probleme wegen der Verbindung (ein Applet darf sich zum Server, von welchem es angefordert wurde, verbinden) aber was ich mich selbst gefragt habe, ist das Zugreifen auf die Bilddateien ... also der Benutzer wählt eine Datei aus, welche von seinem Rechner stammt und diese würd übertragen. Ich glaube, da geht es ohne Signierung des Applets nicht.[/edit]
Java:
URL url = new URL("http://localhost:80/upload.php");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
String boundary = "---------------------------" + createBoundary(srcFile.toString());
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
conn.setDoOutput(true);
conn.setUseCaches(false);
Image img = new ImageIcon(ImageIO.read(srcFile)).getImage();
BufferedImage outImg = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics g = outImg.getGraphics();
g.drawImage(img, 0, 0, null);
g.dispose();
ByteArrayOutputStream byteStream = new ByteArrayOutputStream(512);
String content = "--" + boundary + "\r\n"
+ "Content-Disposition: form-data; name=\"upload_file\"; filename=\"" + srcFile.toString() + "\"\r\n"
+ "Content-Type: image/pjpeg\r\n"
+ "\r\n";
byte[] bytes = content.getBytes();
byteStream.write(bytes, 0, bytes.length);
ImageIO.write(outImg, "jpg", byteStream);
content = "\r\n--" + boundary + "\r\n"
+ "Content-Disposition: form-data; name=\"feld\"\r\n"
+ "\r\n"
+ "Inhalt\r\n"
+ "--" + boundary + "--\r\n";
bytes = content.getBytes();
byteStream.write(bytes, 0, bytes.length);
byteStream.writeTo(conn.getOutputStream());
if(conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
// HTTP Anfrage erforlgreich abgesetzt
}
In PHP würdest du bei phpinfo() die Variablen $_FILES["upload_file"] und $_POST["feld"] sehen. Hier noch die Methode, mit welcher ich mein boundary generiere:
Java:
// benötigt java.security.*; Package
public String createBoundary(String s)
throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(s.getBytes());
byte[] digest = md.digest();
String boundary = "";
for(int i = 0; i < digest.length; i++) {
boundary += Integer.toHexString(digest[i] & 0xFF);
}
return boundary;
}
lg Billie
[edit]Hab den Code für das Vekleinern des Bildes entfernt, bei mir war die Vorgabe Bild hat eine max. Höhe/Breite von 400px und wird automatisch verkleinert und dann erst zum Server geschieckt. Wenn du das Ganze als Applet realisierst, gibt es theoretisch keine Probleme wegen der Verbindung (ein Applet darf sich zum Server, von welchem es angefordert wurde, verbinden) aber was ich mich selbst gefragt habe, ist das Zugreifen auf die Bilddateien ... also der Benutzer wählt eine Datei aus, welche von seinem Rechner stammt und diese würd übertragen. Ich glaube, da geht es ohne Signierung des Applets nicht.[/edit]
Zuletzt bearbeitet: