关于下载的临时文件管理 手动写一对管理临时缓存文件的函数
发布于 4 年前 作者 nayao 1533 次浏览 来自 分享

最近在进行临时文件缓存时经常遇到 文件存满的情况 但是在文件的管理上遇到了麻烦

而且发现在文件存满时 因为没有缓存空间 canvas图片保存功能、 录音等功能也会遇到问题

浏览官方文档 发现 FileSystemManager.getSavedFileList 不能正确返回已经缓存的文件列表

而使用 FileSystemManager.getFileInfo 和 FileSystemManager.access[Sync] 函数又可以正常访问已经缓存的文件

不知道是否还有其他方法访问已经缓存的临时文件 在没有找到方法之前先自己手动写了一对管理缓存文件的函数 原理是利用浏览器缓存 localStorage 来缓存已经缓存成功的文件 每次新增缓存文件的时候 遍历过往已经缓存的文件 验证是否超出 删除最先缓存的文件 其中缓存的临时文件大小可以根据微信官方的规则和自己的需求进行调整

比如低版本微信只允许20M的缓存大小 后来变成了50M 200M 我这里设置的最大缓存大小是100M 留一部分空间用来缓存一些临时用的其他东西

1.检查是否已经缓存 参数是你要缓存的文件地址

添加新的文件加入缓存列表

上面的不能复制 而社区的高亮没那么完善 所以上的图片 以下是代码

var FileSystemManager = wx.getFileSystemManager();
var checkmediacache = function(serversrc,callback = function(){}){
  let medialist = m.getl('dubcache');
  let isexist = 0;
  for(let i in medialist ){
    let d = medialist[i];
    if(d.serversrc==serversrc){
      isexist = 1;
      FileSystemManager.access({
        path:d.localsrc,
        success(res){
          console.log('找到了:',d)
          callback(d.localsrc)
        },fail(err){
          console.log(err)
          callback(false)
        }
      })
      return;
    }
  }
  if(!isexist){
    return callback(false)
  }
}
var cachemaxsize = 100;
var setmediacache = function(dubcache){
  let debug = false;
  debug?console.log('要缓存的对象:',dubcache):'';
  let dublist = m.getl('dubcache');
  debug?console.log('现在的缓存:',dublist):'';
  if(!dublist){
    dublist = [dubcache];
  }else{
    dublist = [dubcache].concat(dublist.reverse());
  }
  let newlist = [];
  let size = 0;
  for(let i in dublist){
    let d = dublist[i];
    size += d.size;
    // console.log(d.size, size)
    if(size>(cachemaxsize*1024*1024)){
      FileSystemManager.unlink(d.localsrc);
    }else{
      newlist.push(d);
    }
  }
  m.setl('dubcache',newlist);
  debug?console.log('已经缓存的列表',newlist):'';
  return newlist;
}
回到顶部