文件操作
一、下载文件自定义路径与重命名
开发过程中参考了以下链接:
参考地址:https://www.cxymm.net/article/qq_35620498/112183377
参考地址: https://ask.dcloud.net.cn/question/141013
最终使用:
// 下载文件
downloadFile() {
this.isDownBtn = false;
var url = this.file;
let dtask = plus.downloader.createDownload(url, {
//本地路径开头使用file://,跟上手机文件本地目录storage/emulated/0,就是用户文件管理器能看到的了,之后我创建文件夹,后缀是用于文件命名和格式修改,可以使用变量。
filename: "_downloads/" + this.getFileName(this.file) //利用保存路径,实现下载文件的重命名
},(d, status) => {
//d为下载的文件对象
if (status == 200) {
console.log("下载成功");
//下载成功,d.filename是文件在保存在本地的相对路径,使用下面的API可转为平台绝对路径
let fileSaveUrl = plus.io.convertLocalFileSystemURL(d.filename);
bluetoothConnect.sendWatchFace(this.file,fileSaveUrl, this.watchId,
result => {
console.log(result);
this.width = result
})
} else {
//下载失败
console.log("下载失败");
plus.downloader.clear(); //清除下载任务
this.isDownBtn = true;
this.width = 0;
}
});
try {
dtask.start(); // 开启下载的任务
var prg = 0;
var showLoading = plus.nativeUI.showWaiting("正在下载"); //创建一个showWaiting对象
dtask.addEventListener('statechanged', (task, status) => {
// 给下载任务设置一个监听 并根据状态 做操作
switch (task.state) {
case 1:
showLoading.setTitle("正在下载");
break;
case 2:
showLoading.setTitle("已连接到服务器");
break;
case 3:
prg = parseInt((parseFloat(task.downloadedSize) / parseFloat(task.totalSize)) *
100);
showLoading.setTitle(" 正在下载" + prg + "% ");
if (prg == 100) {
plus.nativeUI.closeWaiting();
}
break;
case 4:
plus.nativeUI.closeWaiting();//下载完成
break;
}
});
} catch (err) {
console.log('错误信息', err)
plus.nativeUI.closeWaiting();
}
}
二、判断文件是否已存在
参考地址:https://www.html5plus.org/doc/zh_cn/io.html#plus.io.File
最终使用:
// 判断文件存在
isFileExists() {
plus.io.resolveLocalFileSystemURL('_downloads/', (entry) => {
var directoryReader = entry.createReader();
//读取这个目录下的所有文件
directoryReader.readEntries((entries)=> {
var i;
var watchFaceName=this.getFileName(this.file);
var fileFlag=true;
for (i = 0; i < entries.length; i++) {
console.log(entries[i].name);
if(watchFaceName==entries[i].name){//该文件已下载,直接取该路径传给后端
fileFlag=false;
break
}
}
if(fileFlag){
this.downloadFile();//文件未被下载,进行下载
}else{//文件已下载,直接取路径
this.isDownBtn = false;
var filename="_downloads/" + watchFaceName;
let fileSaveUrl = plus.io.convertLocalFileSystemURL(filename);
bluetoothConnect.sendWatchFace(this.file,fileSaveUrl, this.watchId,
result => {
console.log(result);
this.width = result
})
}
})
})
},
三、MD5检验
MD5学习:https://www.cxyzjd.com/article/learning__java/90377677
实例参考地址:https://cloud.tencent.com/developer/article/1854222?from=15425
最简洁:
DigestUtils.md5Hex(new FileInputStream(path));
四、文件以url的形式进行md5加密
参考地址:
https://blog.csdn.net/u011974797/article/details/105701904?spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7.pc_relevant_antiscanv2&utm_relevant_index=10
最终使用:
/**
* 获取url链接文件的MD5值
*
* @param filePath
* @throws Exception
*/
public String getMd5(String filePath) throws Exception {
InputStream inputStream = null;
String md5 = null;
try {
//url路径
URL url = new URL(filePath);
//获取连接
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(3 * 1000);
//设置请求头
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36");
inputStream = connection.getInputStream();
//DigestUtils为org.apache.commons.codec.digest.DigestUtils下的类
md5 = DigestUtils.md5Hex(inputStream);
System.out.println(md5);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (inputStream != null) {
//关闭流
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return md5;
}