Java 网络资源下载
程序员文章站
2022-03-02 21:15:49
...
通过Java 下载网络资源
1、通过url获取网络资源文件流
2、将文件流写入字节数组
3、将字节数组输出到客户端浏览器
4、这种方式文件名及扩展名根据URL自行定义
5、适用于图片 .xml .txt 等浏览器可直接解析的资源下载,其他资源可以直接根据URL进行下载
6、http client 下载方式
/**
* 图片另存为
* @param request
* @param response
*/
@RequestMapping("img_download")
public void downloadHouseImg(HttpServletRequest request,HttpServletResponse resp){
String url = request.getParameter("img_url");
//获取网络图片
InputStream content = null;
//创建零时文件
String timstamp = String.valueOf(System.currentTimeMillis());
HttpClient httpclient = new DefaultHttpClient();
Long contentLength = 0L;
String[] fileName = url.substring(url.lastIndexOf("/") + 1).split("\\.");
try{
HttpGet httpget = new HttpGet(url);
HttpResponse response = httpclient.execute(httpget);
if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
HttpEntity entity = response.getEntity();
content = entity.getContent();
contentLength = entity.getContentLength();
}
byte[] buffer = new byte[contentLength.intValue()];
content.read(buffer);
// 清空response
resp.reset();
// 设置response的Header
resp.addHeader("Content-Disposition", "attachment;filename=" + fileName[0]+fileName[1]);
resp.addHeader("Content-Length", "" + buffer.length);
resp.setContentType("application/octet-stream");
OutputStream toClient = new BufferedOutputStream(resp.getOutputStream());
toClient.write(buffer);
toClient.flush();
toClient.close();
}catch(Exception e){
e.printStackTrace();
}finally{
httpclient.getConnectionManager().shutdown();
}
}
7、进过测试 httpclient下载方式,图片会平凡出现不完整问题 提供以下流下载方法
public void downloadHouseImg(HttpServletRequest request,HttpServletResponse resp){
String url = request.getParameter("img_url");
String[] fileName = url.substring(url.lastIndexOf("/") + 1).split("\\.");
//获取网络图片
InputStream content = null;
String timstamp = String.valueOf(System.currentTimeMillis());
HttpClient httpclient = new DefaultHttpClient();
Long contentLength = 0L;
try{
URL img = new URL(url);
InputStream imgis = img.openStream();
resp.reset();
if(fileName != null && fileName.length >= 2){
resp.addHeader("Content-Disposition", "attachment;filename=" + fileName[0] + "." + fileName[1]);
}else{
resp.addHeader("Content-Disposition", "attachment;filename=" + timstamp+".png");
}
resp.setContentType("application/octet-stream");
OutputStream ots = resp.getOutputStream();
int size = 0;
byte[] buffer = new byte[8192];
while((size = imgis.read(buffer)) != -1){
ots.write(buffer,0,size);
}
ots.flush();
ots.close();
imgis.close();
}catch(Exception e){
e.printStackTrace();
}finally{
httpclient.getConnectionManager().shutdown();
}
}