Обработка загрузок в Java

Как я смог бы обработать использование загрузок HttpResponse в Java? Я выполнил запрос HttpGet на определенный сайт - сайт возвращает файл, который будет загружен. Как я могу обработать эту загрузку? InputStream, кажется, не может обработать его (или возможно я использую его неправильный путь.)

6
задан Colin 't Hart 17 October 2013 в 12:47
поделиться

3 ответа

Предполагая, что вы на самом деле речь идет о HttpClient , вот 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) {}
        }
    }

}

Здесь отлично работает. Ваша проблема в другом.

8
ответ дан 10 December 2019 в 02:45
поделиться

Откройте поток и отправьте файл:

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
ответ дан 10 December 2019 в 02:45
поделиться

Обычно, когда вы хотите, чтобы браузер отображал диалоговое окно загрузки для загружаемого файла, вы должны установить входящий поток ввода содержимое непосредственно в объект ответа steam и установите тип содержимого ответа (объект HttpServletResponse ) для соответствующего типа файла.

то есть

response.setContentType(.. relevant content type)

Тип контента может быть application / pdf для файлов PDF в качестве примера.

Если в браузере есть плагин для отображения соответствующего файла в окне браузера, файл откроется, и пользователь сможет сохранить его, в противном случае браузер покажет окно загрузки.

0
ответ дан 10 December 2019 в 02:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: