# Problem beim Senden einer Datei



## placebo76 (14. Mrz 2007)

Hallo,

möchte in meinem Java-Applet eine Datei an ein PHP-Skript senden.

Mein in Java erstellter und versendeter Request sieht so aus:



> OKPOST /test.php HTTP/1.1
> Host: www.meinedomain.de
> User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.2) Gecko/20021126
> Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8
> ...



die Antwort so (inkl. Ausgabe von _fopen('php://stdin', 'r');_ und _$HTTP_RAW_POST_DATA_):


```
HTTP/1.1 200 OKDate: Wed, 14 Mar 2007 20:03:15 GMTServer: Apache/1.3.31 (Unix) FrontPage/5.0.2.2635 PHP/4.4.2X-Powered-By: PHP/4.4.2Keep-Alive: timeout=5, max=100Connection: Keep-AliveTransfer-Encoding: chunkedContent-Type: text/html0
```

Wieso wird der Inhalt nicht mitgeschickt? 

Ist dieser kryptische Zeichensatz vor dem letzten Boundary normal? hat immer die gleiche Größe egal wie groß die Datei ist.

Java-Code:


```
final DataOutputStream raw = new DataOutputStream(socket.getOutputStream());
        	final Writer wr = new OutputStreamWriter(raw);

            final String boundary = "\r\n---------------------------" + ((int)(Math.random() * 1000000000)) + "\r\n";
        	final String contentdispo = boundary + "Content-Disposition: form-data; name=\"file-upload\"; filename=\"" + theFile.getName() +"\"\r\n"
            	+ "Content-Type: text/plain\r\n";

        	String data = "POST /" + path + " HTTP/1.1\r\n"
                + "Host: " + hostname.replace("http://", "") + "\r\n"
                + "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.2) Gecko/20021126\r\n"
                + "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8\r\n"
                + "Referer: " + hostname + "/" + path + "\r\n"
                + "Pragma: no-cache\r\n"
                + "Content-Type: multipart/form-data; boundary=" + boundary.replace("\r\n", "") + "\r\n"
                + "Content-Length: " + ((int)theFile.length() + contentdispo.length() + boundary.length()) + "\r\n"
                + "Connection: keep-alive\r\n"
                + contentdispo;
        	
            wr.write(data);
            wr.flush();

            raw.write(theData);
            
            jta.append(data + theData + "\r\n" + boundary.replace("\r\n", "") + "--\r\n\r\n\r\n");
            
            raw.flush();

            wr.write("\r\n" + boundary.replace("\r\n", "") + "--\r\n");
            wr.flush();
```


----------



## Wildcard (14. Mrz 2007)

Was soll denn theData sein?


----------



## placebo76 (14. Mrz 2007)

oh sorry da fehlt noch ein vorheriger java-code-block


```
final String hostname = "www.meinedomain.de";
        	final int port = 80;
        	final InetAddress addr = InetAddress.getByName(hostname);
        	final Socket socket = new Socket(addr, port);
        	final String path = "test.php";

        	final File theFile = new File("E:/java/hallo4.txt");
        	BufferedReader in = new BufferedReader(new FileReader(theFile));

            StringBuffer content = new StringBuffer();
            String str;
            while((str = in.readLine()) != null){
                content.append(str + "\r\n");
            }

        	DataInputStream fis = new DataInputStream(new BufferedInputStream(new
                FileInputStream(theFile)));
            byte[] theData = new byte[(int) theFile.length( )];

            fis.readFully(theData);
            fis.close();
```


----------



## placebo76 (14. Mrz 2007)

sehe ich das richtig, dass die Variable "Content" mit dem Inhalt der datei bestückt wird aber anschließend keine Verwendung mehr findet?

EDIT: ich glaube die ist eh nicht wichtig


----------



## Wildcard (14. Mrz 2007)

Und wie genau stellst du dir vor soll PHP ein *Java byte[]* interpretieren?   :bahnhof: 
Dieser 'kryptische Zeichensatz' [B@313170  sieht übrigens schwer nach der toString Methode deines byte[] aus


----------



## placebo76 (14. Mrz 2007)

ich hätte ja auch drauf getippt dass im Datenbereich ascii-zeichen landen o.ä. aber in den im Internet zu findenden Beispielen is es überall so. Wie auch immer das funktionierne soll :/


----------

