我如何能够在 Java 中使用 HttpResponse 处理下载?我向特定站点发出了 HttpGet 请求 - 该站点返回要下载的文件。我该如何处理这个下载?InputStream 似乎无法处理它(或者我可能以错误的方式使用它。)
问问题
6400 次
3 回答
8
假设您实际上是在谈论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) {}
}
}
}
在这里工作正常。你的问题出在其他地方。
于 2010-04-13T21:02:52.327 回答
1
打开一个流并发送文件:
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" );
}
于 2010-04-13T20:44:16.587 回答
0
一般来说,当您希望浏览器显示要下载文件的下载对话框时,您应该将传入的inputstream
内容直接设置到响应对象流中,并将响应(HttpServletResponse
对象)的内容类型设置为相关的文件类型。
IE,
response.setContentType(.. relevant content type)
内容类型可以是application/pdf
pdf 文件为例。
如果浏览器有插件可以在浏览器窗口中显示相关文件,文件将打开并保存,否则浏览器将显示下载框。
于 2010-04-13T20:41:09.683 回答