Javaネットワークリソースのダウンロード

3778 ワード

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