1、搭建apk文件下载路径(Java)
@GetMapping("/download")
public String download(HttpServletResponse response) throws IOException {
// 下载的文件名
String fileName = "大拇指出行.apk";
// 如果文件名不为空,则进行下载
if (!StringUtils.isEmpty(fileName)) {
//设置文件路径
String realPath = "apk文件的路径";
File file = new File(realPath, fileName);
// 如果文件名存在,则进行下载
if (file.exists()) {
// 配置文件下载
response.setHeader("content-type", "application/octet-stream");
response.setContentType("application/octet-stream");
// 下载文件能正常显示中文
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
response.setHeader("Content-Length",""+file.length());
// 实现文件下载
byte[] buffer = new byte[1024];
FileInputStream fis = null;
BufferedInputStream bis = null;
try {
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
OutputStream os = response.getOutputStream();
int i = bis.read(buffer);
while (i != -1) {
os.write(buffer, 0, i);
i = bis.read(buffer);
}
}
catch (Exception e) {
log.info("Download the apk failed!");
}
finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
return null;
}
2、添加下载所需对比的json文件,并做文件映射(Java,SpringBoot2.x)
{ "update": "yes", "version": "1.0.1", "url": "你的APK文件的下载路径" }
@Configuration public class MvcConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/version.json").addResourceLocations("classpath:/version/version.json"); } }
3、App.vue页面的methods添加以下方法
// 获取当前版本号
getNativeVersion(){
let that = this;
plus.runtime.getProperty(plus.runtime.appid, function(inf){
that.nativeVersion = inf.version;
that.checkUpdate(inf.version);
localStorage.setItem("nativeVersion", inf.version);
});
},
// 检查更新
checkUpdate(nativeVersion){
let that = this;
const checkUrl = "你的更新地址?date="+new Date();
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if (xhr.readyState === 4) {
if(xhr.status === 200){
let responseObj = JSON.parse(xhr.responseText);
let serverVersion = responseObj.version;
if(responseObj.update === "yes" && nativeVersion < serverVersion){
that.downloadApk(responseObj.url);
}
}
}
};
xhr.open('GET',checkUrl);
xhr.send();
},
// 下载apk文件
downloadApk(url){
let that = this;
plus.downloader.createDownload( url , {filename: "_doc/update/"}, function(d, status){
if ( status === 200 ) {
// 安装apk资源包
that.installFlag = true;
that.path = d.filename;
}
}).start();
},
// 安装apk
installApk(){
this.installFlag = false;
plus.nativeUI.showWaiting("安装更新");
plus.runtime.install(this.path,{},function(){
plus.nativeUI.closeWaiting();
plus.nativeUI.alert("更新完成!",function(){
// 更新完成后重启应用
plus.runtime.restart();
});
},function(e){
plus.nativeUI.closeWaiting();
plus.nativeUI.toast("安装更新失败!");
});
},
使用nginx搭建下载文件服务器,nginx默认支持断点续传
1、centos7下yum安装方式:https://www.cnblogs.com/knightdreams6/p/11395444.html
2、nginx配置
server {
listen 你的端口号;
server_name 你的服务器IP;
charset utf-8;
access_log /var/log/nginx/host.access.log main;
root 你的APK文件路径;
location / {
default_type 'application/octet-stream';
add_header Content-disposition "attachment";
}
}
这样就可以通过 你的服务器IP:你的端口号/你的APK文件名称进行下载