公司的开发的APP,需要在线更新功能,用户在登录后,发送给后台当前的版本,后台进行判断,如果不是最新版本,就直接下载最新安装包
每次更新后的安装包,放到服务器的固定位置,然后把路径、版本号、更新内容等信息存入数据库
1、android调用接口,查询最新版本信息,这块代码忽略
2、调用接口下载最新的安装包
/**
* 下载最新版本
* @Title:getNewVersion
* @param response
*/
@RequestMapping("/getNewVersion")
public void getNewVersion(HttpServletRequest request, HttpServletResponse response){
//在数据库查询要下载的文件地址
Version version = versionService.getLatestVersion();
//文件在本地的绝对路径
String filePath= request.getSession().getServletContext().getRealPath("/")+version.getVersionUrl();
try {
//创建对象
File file = new File(filePath);
// 取得文件名。
String filename = file.getName();
//设置response的编码方式
response.setContentType("application/x-download");
//写明要下载的文件的大小
response.setContentLength((int)file.length());
//设置附加文件名
response.setHeader("Content-Disposition","attachment;filename="+filename);
//读出文件到i/o流
FileInputStream fis=new FileInputStream(file);
BufferedInputStream buff=new BufferedInputStream(fis);
byte [] b=new byte[1024];//相当于我们的缓存
long k=0;//该值用于计算当前实际下载了多少字节
//从response对象中得到输出流,准备下载
OutputStream myout=response.getOutputStream();
//开始循环下载
while(k<file.length()){
int j=buff.read(b,0,1024);
k+=j;
//将b中的数据写到客户端的内存
myout.write(b,0,j);
}
//将写入到客户端的内存的数据,刷新到磁盘
myout.flush();
} catch (IOException e) {
e.printStackTrace();
}
}