使用Java处理下载

如何在Java中使用HttpResponse处理下载? 我向特定站点发出了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" ); } 

通常,当您希望浏览器显示要下载的文件的下载对话框时,您应该将传入的输入inputstream内容直接设置到响应对象steam中,并将响应的内容类型( HttpServletResponse对象)设置为相关的文件类型。

 response.setContentType(.. relevant content type) 

作为示例,内容类型可以是pdf文件的application/pdf

如果浏览器有一个插件在浏览器窗口中显示相关文件,则文件将打开,用户可以保存,否则浏览器将显示下载框。