@RequestMapping(value="/download")
public void download(Model model,HttpServletResponse response,HttpServletRequest request) throws Exception {
//读取property文件,获取最新下载地址
Properties props = new Properties();
String filePath=getClass().getClassLoader().getResource("/").getPath() +"config.properties";
InputStream in = new BufferedInputStream (new FileInputStream(filePath));
props.load(in);
String path = props.getProperty ("version.url");
// 初始化文件流,提供客户端下载
if(!"".equals(path)){
path=new String(path.getBytes("ISO-8859-1"),"UTF-8");
File file=new File(request.getSession().getServletContext().getRealPath("/")+path);//构造要下载的文件
if(file.exists()){
InputStream ins=new FileInputStream(request.getSession().getServletContext().getRealPath("/")+path);//构造一个读取文件的IO流对象
BufferedInputStream bins=new BufferedInputStream(ins);//放到缓冲流里面
OutputStream outs=response.getOutputStream();//获取文件输出IO流
BufferedOutputStream bouts=new BufferedOutputStream(outs);
//response.setContentType("application/x-download");//设置response内容的类型 普通下载类型
response.setContentType("application/vnd.android.package-archive");//设置response内容的类型 下载安卓应用apk
response.setContentLength((int) file.length());//设置文件大小
response.setHeader("Content-disposition","attachment;filename="+ URLEncoder.encode(file.getName(), "UTF-8"));//设置头部信息
int bytesRead = 0;
byte[] buffer = new byte[8192];
//开始向网络传输文件流
while ((bytesRead = bins.read(buffer, 0, 8192)) != -1) {
bouts.write(buffer, 0, bytesRead);
}
bouts.flush();//这里一定要调用flush()方法
ins.close();
bins.close();
outs.close();
bouts.close();
}else{
System.out.println("下载的文件不存在");
}
}else{
System.out.println("下载文件时参数错误");
}
}
注意了,如果没有设置下载文件的大小,手机可能会不支持下载哦!如果是安卓应用,必须修改下载类型为安卓应用!
参考自:http://www.cnblogs.com/yaozhongxiao/archive/2013/07/17/3194765.html