file-save-manager.js 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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}) {
  24. return new Promise((resolve, reject) => {
  25. wx.getFileInfo({
  26. filePath: tempFilePath,
  27. success: tempFailInfo => {
  28. let tempFileSize = tempFailInfo.size;
  29. // console.log('本地临时文件大小', tempFileSize);
  30. if (tempFileSize > MAX_SIZE) {
  31. reject({errMsg: '文件过大'});
  32. return;
  33. }
  34. wx.getSavedFileList({
  35. success: savedFileInfo => {
  36. let {fileList} = savedFileInfo;
  37. if (!fileList) {
  38. reject({errMsg:'获取到的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. resolve({savedFilePath: res.savedFilePath});
  71. },
  72. fail: reject
  73. });
  74. },
  75. fail: reject
  76. });
  77. }
  78. });
  79. });
  80. }
  81. }