Wie kann ich Downloads mit HttpResponse in Java verarbeiten? Ich habe eine HttpGet-Anfrage an eine bestimmte Site gestellt - die Site gibt die herunterzuladende Datei zurück. Wie kann ich mit diesem Download umgehen? InputStream scheint nicht in der Lage zu sein, damit umzugehen (oder vielleicht verwende ich es falsch).Umgang mit Downloads in Java
Antwort
Sie Unter der Annahme, tatsächlich über HttpClient sprechen, ist hier ein SSCCE:
package com.stackoverflow.q2633002;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
public class Test {
public static void main(String... args) throws IOException {
System.out.println("Connecting...");
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet("http://apache.cyberuse.com/httpcomponents/httpclient/binary/httpcomponents-client-4.0.1-bin.zip");
HttpResponse response = client.execute(get);
InputStream input = null;
OutputStream output = null;
byte[] buffer = new byte[1024];
try {
System.out.println("Downloading file...");
input = response.getEntity().getContent();
output = new FileOutputStream("/tmp/httpcomponents-client-4.0.1-bin.zip");
for (int length; (length = input.read(buffer)) > 0;) {
output.write(buffer, 0, length);
}
System.out.println("File successfully downloaded!");
} finally {
if (output != null) try { output.close(); } catch (IOException logOrIgnore) {}
if (input != null) try { input.close(); } catch (IOException logOrIgnore) {}
}
}
}
Werke hier in Ordnung. Dein Problem liegt woanders.
Ich fügte den Inhaltstyp der Header (Application/Oktettstrom) und mit der gleichen Methode, die den Trick zu tun schien. – Tereno
Im Allgemeinen, wenn Sie möchten, dass der Browser das Download-Dialogfeld für eine Datei zum Herunterladen anzeigen, sollten Sie Setzen Sie den eingehenden Inhalt inputstream
direkt in das Antwortobjekt steam und setzen Sie den Inhaltstyp der Antwort (HttpServletResponse
Objekt) auf den entsprechenden Dateityp.
heißt
response.setContentType(.. relevant content type)
Inhaltstyp kann als Beispiel application/pdf
für PDF-Dateien sein.
Wenn der Browser ein Plugin hat, um die relevante Datei im Browserfenster anzuzeigen, öffnet sich die Datei und der Benutzer kann speichern, ansonsten zeigt der Browser die Downloadbox an.
Öffnen Sie einen Stream und senden Sie die Datei:
try {
FileInputStream is = new FileInputStream(_backupDirectory + filename);
OutputStream os = response.getOutputStream();
byte[] buffer = new byte[65536];
int numRead;
while ((numRead = is.read(buffer, 0, buffer.length)) != -1) {
os.write(buffer, 0, numRead);
}
os.close();
is.close();
}
catch (FileNotFoundException fnfe) {
System.out.println("File " + filename + " not found");
}
- 1. Umgang mit KeyEvents in Java
- 2. Umgang mit RuntimeExceptions in Java
- 3. Umgang mit NullPointerException in Java
- 4. Umgang mit Warnungen mit HtmlUnitDriver in Java
- 5. XML Umgang mit Android Java
- 6. Umgang mit StringIndexOutOfBoundsException in If-Anweisung Java
- 7. Umgang mit Karte von Karten in Java
- 8. Umgang mit CRF ++ und Java in Windows
- 9. Ausnahme in Java Umgang schließlich
- 10. Java - Umgang mit Generika mit Vererbung
- 11. Datei-Downloads mit Drupal
- 12. Java-Serialisierung und Umgang mit Objekten
- 13. Umgang mit Trennzeichen mit Escapezeichen in Java String.split() Methode
- 14. Umgang mit Java Ausnahmen in Konstrukteuren gefangen, mit Endglieder
- 15. Umgang mit Dateidownloads mit JavaFX 2.0 WebEngine
- 16. Umgang mit Gleichheit in einer Arraylist in Java
- 17. Umgang mit Nullwerten in Protobuffer
- 18. Handhabung Downloads in QtWebEngine
- 19. parallele Downloads in PHP
- 20. Wie komme ich gleichzeitig durch 80.000 Downloads in Java?
- 21. Good Practice: Umgang mit Keystore-Passwörtern in Android/Java?
- 22. Der richtige Umgang mit Einzug der Java @Override in Emacs
- 23. Umgang mit großen Eingabedaten in einer Java-Anwendung
- 24. Umgang mit MySQL Datumsangaben und Zeitstempeln in Java
- 25. Umgang mit IOException
- 26. Umgang mit Java benutzerdefinierte Serialisierung mit mehreren Versionen von Serialisierungsklassen?
- 27. URISyntaxException - Umgang mit URLs mit%
- 28. InputStream - Umgang mit Netzwerkänderungen
- 29. Umgang mit Sonderzeichen mit Java und Struts 1.1
- 30. Eclipse.app mit null Bytes Größe erscheint wiederholt in ~/Downloads Ordner
Über welche API/Bibliothek sprechen Sie? [Apache HttpComponents HttpClient v4] (http://hc.apache.org/httpcomponents-client/index.html)? Wenn Sie nicht wissen, erwähnen Sie bitte den Paketnamen der Klassen "HttpResponse" und "HttpGet", über die Sie sprechen, und geben Sie vorzugsweise einen [SSCCE] (http://sscce.org) ein, damit wir Ihren Fehler erkennen können . – BalusC
Tatsächlich verwende ich die Apache HttpComponents. Die Antwort, die du gepostet hast, scheint die zu sein, nach der ich suche. Wäre es jedoch möglich, alle Eingaben in eine Zeichenfolge im Vergleich zu einer tatsächlichen Datei zu speichern? Meine Konvertierung von Eingabestream in String-Methode verwendet einen gepufferten Leser, aber es gibt mir null. – Tereno