index.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /**
  2. * 获取目录对象或文件对象
  3. * @param {string} url 要操作文件或目录的URL地址
  4. * @returns {Promise<object>} 若成功返回请求到的目录或文件对象,否则返回 null
  5. */
  6. export function resolveFile(url) {
  7. return new Promise(resolve => {
  8. // #ifdef APP-PLUS
  9. plus.io.resolveLocalFileSystemURL(url, resolve, () => resolve(null))
  10. // #endif
  11. // #ifndef APP-PLUS
  12. resolve(null)
  13. // #endif
  14. })
  15. }
  16. /**
  17. * 获取目录大小
  18. * @param {string} dir 目录地址
  19. * @returns {Promise<number>} 返回目录大小,单位字节
  20. */
  21. export function getDirSize(dir) {
  22. return new Promise(async resolve => {
  23. // #ifdef APP-PLUS
  24. const entry = await resolveFile(dir)
  25. if (!entry) return resolve(0)
  26. entry.getMetadata(
  27. res => resolve(res.size || 0),
  28. () => resolve(0),
  29. true
  30. )
  31. // #endif
  32. // #ifndef APP-PLUS
  33. resolve(0)
  34. // #endif
  35. })
  36. }
  37. /**
  38. * 删除目录
  39. * @param {string} dir 目录地址
  40. * @returns {Promise<boolean>} 删除状态
  41. */
  42. export function removeDir(dir) {
  43. return new Promise(async resolve => {
  44. // #ifdef APP-PLUS
  45. const entry = await resolveFile(dir)
  46. if (!entry) return resolve(false)
  47. entry.removeRecursively(
  48. () => resolve(true),
  49. () => resolve(false)
  50. )
  51. // #endif
  52. // #ifndef APP-PLUS
  53. resolve(false)
  54. // #endif
  55. })
  56. }
  57. /**
  58. * 格式化字节大小
  59. * @param {number} size 字节大小
  60. * @returns {string} 格式化后的文字
  61. */
  62. export function formatSize(size) {
  63. const s = parseInt(size)
  64. if (s === 0) return '0B'
  65. else if (s < 1024) return s + 'B'
  66. else if (s < 1048576) return (s / 1024).toFixed(2) + 'KB'
  67. else if (s < 1073741824) return (s / 1048576).toFixed(2) + 'MB'
  68. else return (s / 1073741824).toFixed(2) + 'GB'
  69. }