JS要求:
// 下载图片 関数oDownLoad(URL、ファイル名){ VARの URL = '$ {pageContext.request.contextPath} /file/downFile.do?url=' +のURL + '&ファイル名=' + encodeURI(ファイル名)。 window.location.href = URL; }
Javaのバックエンド:
@RequestMapping(値= "/downFile.do"、メソッド= RequestMethod.GET) 公共 ボイド downPicture(HttpServletRequestのリクエスト、HttpServletResponseの応答)がスロー例外{ にInputStreamを = NULL ; 文字列のURL = request.getParameter( "URL" ); 文字列filename = request.getParameter( "ファイル名" )。 // ファイル名= java.net.URLDecoder.decode(ファイル名、 "UTF-8"); ファイル名= 新しい文字列(filename.getBytes( "GB2312")、 "ISO-8859-1" )。 新しいURL(URL); HttpURLConnectionのCONN = (HttpURLConnectionの)httpUrl.openConnection(); conn.setRequestMethod( "GET" ); conn.setConnectTimeout( 100000)。// 连接超时单位毫秒// conn.setReadTimeout(200000); // 读取超时单位毫秒 conn.setDoInput(真の); conn.setDoOutput(真の); conn.setUseCaches(偽); conn.connect(); 中 = conn.getInputStream()。 バイト [] BS = 新しいです バイト [1024 ]; int型のlen = 0 ; response.reset(); response.setHeader(「プラグマ」、「キャッシュなし」)。 response.setHeader( "のCache-Control"、 "キャッシュなし" )。 response.setContentType(「アプリケーション/オクテットストリーム」)。 response.setHeader( "コンテンツ配置"、 "添付ファイル;ファイル名=" + ファイル名)。 ServletOutputStreamをアウト = response.getOutputStream()。 一方、((LEN = in.read(BS))!= -1 ){ out.write(BS、 out.flush(); // 关流 out.close(); } キャッチ(例外e){ スロー 新しいのRuntimeException(URL + "を下载失败" ); } 最後に{ 試みる{ in.closeを(); } キャッチ(例外e){ } } }