一:java代码片段
/**
* <p>
* 文件下载
* </p>
* @param request
* @param response
* @param filePath 文件路径
* @throws Exception 下载过程中出现异常
*/
public static boolean fileDownLoad(HttpServletRequest request,
HttpServletResponse response, String filePath) throws Exception {
boolean bl=false;
if (response != null && request != null && filePath != null
&& !filePath.equals("")) {
String browserType=request.getParameter("browserType");
final String userAgent = request.getHeader("USER-AGENT");
logger.info("userAgent==:"+userAgent);
// filePath是指欲下载的文件的路径。
filePath = URLDecoder.decode(filePath,"UTF-8");
File file = new File(filePath);
if(!file.exists()){
logger.info("############ FilePath: "+filePath);
throw new Exception("文件不存在!");
}
if(!file.isFile()){
logger.info("############ FilePath: "+filePath);
throw new Exception("非文件类型!");
}
// 取得文件名。
String fileName = file.getName();
if ("IE".equals(browserType)) {// IE浏览器,页面传过来的值,只用于判断是否为IE浏览器
logger.info("ie浏览器");
fileName = URLEncoder.encode(fileName, "UTF8");
} else {
if (userAgent.contains("Mozilla")) {// google,火狐浏览器
fileName = new String(fileName.getBytes(), "ISO8859-1");
logger.info("火狐浏览器");
} else {
logger.info("其他浏览器");
fileName = URLEncoder.encode(fileName, "UTF8");// 其他浏览器
}
}
// 提示框设置
response.reset(); // reset the response
// response.setCharacterEncoding("UTF-8");
response.setContentType("application/octet-stream");//告诉浏览器输出内容为流
response.setHeader("content-disposition", "attachment; filename=\""
+ fileName + "\"");
//读出文件到i/o流
FileInputStream fis=new FileInputStream(file);
BufferedInputStream buff=new BufferedInputStream(fis);
byte [] ary_byte=new byte[1024];//缓存
long k=0;//该值用于计算当前实际下载了多少字节
// 输出流
OutputStream out = response.getOutputStream();
//开始循环下载
while(k<file.length()){
int j=buff.read(ary_byte,0,1024);
k+=j;
//将b中的数据写到客户端的内存
out.write(ary_byte,0,j);
}
// 关闭输出流
if (out != null) {
out.flush();
out.close();
fis.close();
buff.close();
}
bl=true;
logger.info("文件下载完毕!");
} else {
new NullPointerException(
"HttpServletRequest Or HttpServletResponse Or fileName Is Null !");
}
return bl;
}
二:页面判断是否为IE浏览器代码
/点击下载
function assessDataOnload(){
var browser="";
if (window.navigator.userAgent.indexOf("MSIE") >= 1) {
browser="IE";
}
if($("[name='choose']:checked").length){
if(confirm("确定要下载已选中的数据吗?")){
var str = "";
$("[name='choose']:checked").each(function(){
str+=$(this).data("id")+",";
});
window.open("../assessDownLoad/downLoadData.do?browserType="+browser+"&id="+str,"_blank");
}
}else{
alert("请选择要下载的数据!");
}
}