file-save-manager.js 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. const MAX_SIZE = 10400000;
  2. let wholeSize = 0;
  3. setTimeout(() => {
  4. wx.getSavedFileList({
  5. success: savedFileInfo => {
  6. let {fileList} = savedFileInfo;
  7. !!fileList && fileList.forEach(item => {
  8. wholeSize += item.size;
  9. });
  10. // console.log(wholeSize, '总大小');
  11. }
  12. });
  13. });
  14. export default class FileSaveManager {
  15. constructor() {
  16. }
  17. static set(msg, localPath) {
  18. wx.setStorage({key: msg.saveKey, data: localPath})
  19. }
  20. static get(msg) {
  21. return wx.getStorageSync(msg.saveKey);
  22. }
  23. static saveFileRule({tempFilePath, success, fail}) {
  24. wx.getFileInfo({
  25. filePath: tempFilePath,
  26. success: tempFailInfo => {
  27. let tempFileSize = tempFailInfo.size;
  28. // console.log('本地临时文件大小', tempFileSize);
  29. if (tempFileSize > MAX_SIZE) {
  30. !!fail && fail('文件过大');
  31. return;
  32. }
  33. wx.getSavedFileList({
  34. success: savedFileInfo => {
  35. let {fileList} = savedFileInfo;
  36. console.log('文件列表', fileList);
  37. if (!fileList) {
  38. !!fail && fail('获取到的fileList为空,请检查你的wx.getSavedFileList()函数的success返回值');
  39. return;
  40. }
  41. //这里计算需要移除的总文件大小
  42. let sizeNeedRemove = wholeSize + tempFileSize - MAX_SIZE;
  43. if (sizeNeedRemove >= 0) {
  44. //按时间戳排序,方便后续移除文件
  45. fileList.sort(function (item1, item2) {
  46. return item1.createTime - item2.createTime;
  47. });
  48. let sizeCount = 0;
  49. for (let i = 0, len = fileList.length; i < len; i++) {
  50. // console.log('移除的文件1', sizeCount);
  51. if ((sizeCount += fileList[i].size) >= sizeNeedRemove) {
  52. for (let j = 0; j < i; j++) {
  53. // console.log('移除的文件2', fileList[j].filePath);
  54. wx.removeSavedFile({
  55. filePath: fileList[j].filePath,
  56. success: function () {
  57. wholeSize -= fileList[j].size;
  58. // console.log('移除成功', wholeSize);
  59. }
  60. });
  61. }
  62. break;
  63. }
  64. }
  65. }
  66. wx.saveFile({
  67. tempFilePath: tempFilePath,
  68. success: res => {
  69. wholeSize += tempFileSize;
  70. typeof success === "function" && success(res.savedFilePath);
  71. },
  72. fail: fail
  73. });
  74. },
  75. fail: fail
  76. });
  77. }
  78. });
  79. }
  80. }