# Apache HttpClient File Download?



## Ralf121 (16. Jul 2012)

Halli Hallo,
ich finde einfach nichts dazu, wie man mit dem HttpClient Dateien downloaden kann. Alles was ich hier im Forum oder bei Google gefunden habe, war für die version 3.x und nicht für die aktuelle 4.x. Auch im apache tutorial oder in der Doku konnte ich etwas zum Datei download finden. 

Kann mir da jemand ein bisschen auf die Sprünge helfen?

Mfg


----------



## Ralf121 (16. Jul 2012)

Also ich habe es nun so umgesetzt:

```
OutputStream os = new FileOutputStream(fileName);
        InputStream is = getResponse.getEntity().getContent();
        byte[] buf = new byte[4096];
        int read;
        while ((read = is.read(buf)) != -1) {
            os.write(buf, 0, read);
        }
        os.close();
        }
```

Die Frage ist nur, wie stabil ist dies? Ist auch nicht schön dass ich immer 4GB Speicher allokiere oder? Es sollte aber schon möglich sein größere Dateien zu downloaden. Gibt es da noch eine elegantere Methode?

edit:
Bei dem Versuch eine 675 MB große Datei zu laden, ist nach ca. 606 MB folgender Fehler aufgetreten:


> Exception in thread "main" org.apache.http.ConnectionClosedException: Premature end of Content-Length delimited message body (expected: 708388958; received: 635824480


----------



## Ralf121 (18. Jul 2012)

Kann mir hier denn niemand weiterhelfen?


----------



## SI-Vorzeichen (20. Jul 2012)

1) Wie kommst du auf 4 GIGA byte ? 4096 sind lediglich 4 KILO byte. 4GB wären 2^32 = 4294967296 was mit einem INT nicht mehr darstellbar ist und du so desshalb auch einem Array nicht als Größenangabe übergeben könntest.

2) Der Fehler ist eigentlich eindeutig : die read()-Methode erwartet ein bestimmtes Segment bekommt aber ein anderes / falsches vom Server geschickt.

3) Für einen reinen HTTP-Download braucht man nicht mal Apache Commons ... dafür reicht auch [japi]URL[/japi] und [japi]HttpURLConnection[/japi].


----------

