Frage

Wie würde ich handeln Downloads der Lage sein, mit Httpresponse in Java? Ich machte eine HttpGet Anforderung an einen bestimmten Ort - die Website kehrt die Datei heruntergeladen werden. Wie kann ich diesen Download umgehen? Input nicht in der Lage sein scheint, um es zu behandeln (oder vielleicht ist es den falschen Weg Ich verwende.)

War es hilfreich?

Lösung

Angenommen, Sie sind eigentlich reden Httpclient Hier ist 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. Ihr Problem liegt woanders.

Andere Tipps

Ö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" );
}

In der Regel, wenn Sie wollen, dass der Browser den Download-Dialog für eine Datei anzuzeigen heruntergeladen werden, sollten Sie die eingehenden inputstream Inhalte direkt in das Antwortobjekt Dampf gesetzt und stellen Sie den Inhaltstyp der Antwort (HttpServletResponse Objekt) an den jeweiligen Dateityp.

d.h.

response.setContentType(.. relevant content type)

Inhaltstyp kann application/pdf für PDF-Dateien als Beispiel sein.

Wenn Browser ein Plugin zeigen entsprechende Datei im Browser-Fenster hat, wird Datei öffnen und Benutzer dann speichern können, andernfalls Browser, um die Download-Box zeigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top