Как я смог бы обработать использование загрузок HttpResponse в Java? Я выполнил запрос HttpGet на определенный сайт - сайт возвращает файл, который будет загружен. Как я могу обработать эту загрузку? InputStream, кажется, не может обработать его (или возможно я использую его неправильный путь.)
Предполагая, что вы на самом деле речь идет о 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) {}
}
}
}
Здесь отлично работает. Ваша проблема в другом.
Откройте поток и отправьте файл:
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" );
}
Обычно, когда вы хотите, чтобы браузер отображал диалоговое окно загрузки для загружаемого файла, вы должны установить входящий поток ввода
содержимое непосредственно в объект ответа steam и установите тип содержимого ответа (объект HttpServletResponse
) для соответствующего типа файла.
то есть
response.setContentType(.. relevant content type)
Тип контента может быть application / pdf
для файлов PDF в качестве примера.
Если в браузере есть плагин для отображения соответствующего файла в окне браузера, файл откроется, и пользователь сможет сохранить его, в противном случае браузер покажет окно загрузки.