# Datei hochladen zu PHP Server



## Degush (16. Aug 2012)

Hey,

ich möchte eine Datei zu einem PHP-Server hochladen, der diese dann annimmt und speichert.
Habe im Internet dazu einige Quellen gefunden, die auf den MultiPartFormOutputStream verweisen:

http://svn.apache.org/repos/asf/wic...et/util/upload/MultiPartFormOutputStream.java

Allerdings ist mir völlig unklar, wie ich den benutzen soll und was solche Sachen wie "boundaries" sind.
In anderen Quellen wurden immer irgendwelche abstrusen Dinge in das Variablen-Feld geschrieben.
Welcher der Dateityp ist und so weiter ist dabei völlig egal.
Ich möchte dem ausgeführten Skript auf der PHP-Seite nur einen Integer (für die ID der Datei) und die Bytes in der Datei mitteilen, damit ein anderes Skript diese Bytes hinterher wieder herunterladen kann.

Ich weiß zwar, dass das hier ein Java Forum ist, aber vielleicht kennt sich ja doch jemand mit PHP aus. Um die PHP-Seite zu schreiben, die die Datei inklusive Datei-ID annimmt und auf dem Server speichert bräuchte ich auch Hilfe. Die ID allerdings kann ich selber verarbeiten.

Vielen Dank für alle Hilfe,
Malte


----------



## gp (21. Aug 2012)

Hallo Malte,

in deinem Link geht es um eine Methode, die das HTTP-Protokoll nutzt. Das ist recht aufwendig und setzt voraus, dass an der Gegenstelle ein Web-Server ist, der die Datei (oder die Daten), annimmt. Wie das in HTML gemacht wird, findest du bei SelfHtml. Hinter dem Web-Server ist dann dein PHP-Programm, welches die Daten annimmt.

In Java solltest du Module benutzen, die dir die Arbeit abnehmen. HttpClient ist so ein Modul. Hier findet du Beispiele, ganz unten bei "Multipart encoded request entity".

Das ist wohl alles etwas wie mit Kanonen auf Spatzen schießen, wenn es nur um 1 Byte geht. Das könnte auch als Request-Parameter recht einfach übertagen werden:
http://192,168,1,1/MyPHP.php?param=a

In diesem Fall würde ein "a" übergeben, hier könnte auch eine Zahl stehen wie "7", dann wäre es das ASCII-Zeichen 7. Nur mal so als Ansatz. Auch hier kann der HttpClient sicher helfen, schau dir mal Beispiele dazu an (Google ist dein Freund),

Hoffe, etwas geholfen zu haben.

Günter


----------



## Gast2 (21. Aug 2012)

Kannst du nicht ein Protokoll benutzen das dafür besser geeignet ist, FTP beispielsweise?


----------



## schlingel (22. Aug 2012)

Wenn die Dateien klein sind ist es am einfachsten wenn du sie mit base64 "verschlüsselst" und in deinem Formular als ganz normalen Inhalt per POST hochlädst. Auf der Gegenseite erhältst du mit base64_decode wieder den echten Inhalt und kannst ein File rausschreiben.


----------



## Degush (24. Aug 2012)

Gut, ich konnte jetzt einen Dateiversand realisieren.
Dazu habe ich einfach die writeFile Methode vom Stream benutzt.
Mit einfachen POST-Data werde ich bei Dateien nicht auskommen (bis 100 MB)

Ist es wirklich notwendig, dass ich die Datei "verschlüssele"?


```
// Öffnet eine Verbinudng. Boundary ist eine ID
            String boundary = Long.toHexString(System.currentTimeMillis());
            
            connection.setRequestProperty("Accept", "*/*");
            connection.setRequestProperty("Content-Type", MultiPartFormOutputStream.getContentType(boundary));
            connection.setRequestProperty("Cache-Control", "no-cache");

            MultiPartFormOutputStream mpfos = new MultiPartFormOutputStream(this.connection.getOutputStream(),
                    boundary);
            
            mpfos.writeField("tmp_name", f.getName());
            mpfos.writeField("name", f.getName());
            
            mpfos.writeField("uploadname", "app");
            
            mpfos.writeFile("file", 
                    super.connection.guessContentTypeFromName(f.getName()), 
                    f);
            
            mpfos.close();
            
            System.out.println(super.readData());
```


----------



## Templarthelast (24. Aug 2012)

Degush hat gesagt.:


> Ist es wirklich notwendig, dass ich die Datei "verschlüssele"?



Ich denke diese Frage musst du dir selber beantworten, weil wir deine Daten nicht kennen.


----------



## gp (24. Aug 2012)

Nein, du musst nicht verschlüsseln. Wenn es sicherheitsrelevante Daten sind, solltest du nicht HTTP sonder HTTPS verwenden.


----------



## Schandro (24. Aug 2012)

Hi jnetdev, meld dich mal bitte an damit ich dich auf meine ignorier-Liste setzen kann. Noch besser wäre es natürlich wenn man Gast-Posts hier ganz blockieren würde, aber das wird wahrscheinlich nie passieren.


----------



## Schandro (25. Aug 2012)

Edit: Danke an den Mod der jnetdev's Kommentar gelöscht hat, dieses Kommentar ist nun nutzlos 

EDIT: sorry das ich ein 2. Kommentar gepostet hab, wollte eigentlich nur mein erstes editieren. :/


----------

