uni-app设定本地文件过期时间,清除超时文件,释放内存
dataNum为文件的保质期
//获取当前n天之前的日期
getDelTime(dataNum){
let today = new Date();
let nDaysAgo = new Date(today.setDate(today.getDate() - dataNum));
let year = nDaysAgo.getFullYear();
let month = nDaysAgo.getMonth() + 1; // 月份是从0开始的,所以需要加1
let day = nDaysAgo.getDate();
// 将年月日转换为数字格式的字符串,不带任何分隔符-------n天前的年月日
let numericDate = year.toString() +
(month < 10 ? '0' + month : month).toString() +
(day < 10 ? '0' + day : day).toString();
this.delExpiredFile(Number(numericDate))
},
//循环遍历视频图片文件夹,遍历出n天前的文件list,并执行删除操作
async delExpiredFile(maxTime){
// console.log('maxTime',maxTime);
//获取所有图片文件
await this.getImgList(maxTime)
//获取所有视频文件
await this.getVideoList(maxTime)
},
getImgList(maxTime){
// console.log('开始获取图片',maxTime);
this.imgNameList=[]
plus.io.resolveLocalFileSystemURL(
"/storage/emulated/0/_A/img", //指定的目录
(entry) => {
let directoryReader = entry.createReader(); //获取读取目录对象
directoryReader.readEntries(
(entry) => { //历遍子目录
entry.forEach((entryA)=> {
if (entryA.isFile) {
// 获取文件名
let fileName = entryA.name;
this.imgNameList.push(fileName)
}
});
this.imgNameList.forEach((item)=> {
let extractedString = item.substring(4, 12);
let result =Number(extractedString)
if(result < maxTime){
console.log("将要删除的图片名",item);
this.delFile(item,"picture")
}
});
},
(err) => {
console.log("访问目录失败");
});
},
(err) => {
console.log("访问指定目录失败:" + err.message);
});
},
getVideoList(maxTime){
this.videoNameList=[]
plus.io.resolveLocalFileSystemURL(
"/storage/emulated/0/_A/video", //指定的目录
(entry) => {
let directoryReader = entry.createReader(); //获取读取目录对象
directoryReader.readEntries(
(entry) => { //历遍子目录即可
entry.forEach((entryB)=> {
if (entryB.isFile) {
// 获取文件名
let fileName = entryB.name;
this.videoNameList.push(fileName)
}
});
this.videoNameList.forEach((item)=> {
let extractedString = item.substring(6, 14);
let result =Number(extractedString)
if(result < maxTime){
this.delFile(item,"video")
}
});
},
(err) => {
console.log("访问目录失败");
});
},
(err) => {
console.log("访问指定目录失败:" + err.message);
});
},
//删除文件
delFile(fileName,fileType){
console.log('将要删除的文件名fileName',fileName);
return new Promise((resolve, reject) => {
let filePath=null
if(fileType=="video"){
filePath=`/storage/emulated/0/_A/video/${fileName}`
}else if(fileType=="picture"){
filePath=`/storage/emulated/0/_A/img/${fileName}`
}
//删除视频文件
plus.io.resolveLocalFileSystemURL(filePath, (entry)=> {
// 删除文件
entry.remove(()=> {
console.log('文件删除成功');
}, function(error) {
console.error('文件删除失败:' + error.code);
});
});
})
},