在Java后台,代碼如下
public static void downFile(HttpServletRequest request, HttpServletResponse response,String fileUrl,String fileName){
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
OutputStream fos = null;
InputStream fis = null;
try {
fis = new FileInputStream(fileUrl);
bis = new BufferedInputStream(fis);
fos = response.getOutputStream();
bos = new BufferedOutputStream(fos);
setFileDownloadHeader(request,response, fileName);
int byteRead = 0;
byte[] buffer = new byte[8192];
while((byteRead=bis.read(buffer,0,8192))!=-1){
bos.write(buffer,0,byteRead);
}
bos.flush();
fis.close();
bis.close();
fos.close();
bos.close();
} catch (Exception e) {
}
}
public static void setFileDownloadHeader(HttpServletRequest request,HttpServletResponse response, String fileName) {
try {
//中文文件名支持
String encodedfileName = null;
String agent = request.getHeader("USER-AGENT");
if(null != agent && -1 != agent.indexOf("MSIE")){//IE
encodedfileName = java.net.URLEncoder.encode(fileName,"UTF-8");
}else if(null != agent && -1 != agent.indexOf("Mozilla")){
encodedfileName = new String (fileName.getBytes("UTF-8"),"iso-8859-1");
}else{
encodedfileName = java.net.URLEncoder.encode(fileName,"UTF-8");
}
response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedfileName + "\"");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
其中fileUrl是服務器上要下載文件的路徑,fileName是客戶端下載文件的默認名稱
以上代碼參考了小帥帥丶分享的代碼,鏈接如下http://www.oschina.net/code/snippet_1444646_47221
.在為了能夠在瀏覽器端選擇路徑,下載按鈕的觸發方式應該使用 window.location.href =調用后台方法路徑 的方式