欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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();
		}
	}