plusIo.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. /**
  2. * 储存文件到指定的地址:把一个文件移动到另外一个位置 剪切文件 重命名文件
  3. * @param {String} url 新的地址 _doc/ 开头
  4. * @param {String} file 原文件地址
  5. * @param {String} newfilename 新的文件名
  6. */
  7. async function saveFile(url, file, newfilename) {
  8. await creatDirs(url)
  9. let isokm = moveDirectyOrFile(file, url + "/", newfilename);
  10. return isokm
  11. }
  12. /**
  13. * 储存文件到指定的地址:把一个文件复制到另外一个位置 复制文件 重命名文件
  14. * @param {String} url 新的地址 _doc/ 开头
  15. * @param {String} file 原文件地址
  16. * @param {String} newfilename 新的文件名
  17. */
  18. async function saveFileV2(url, file, dirName , newfilename) {
  19. await creatDirs(url)
  20. let isokm = copyFileTo(file, url, dirName , newfilename);
  21. return isokm
  22. }
  23. //循环创建目录 url:"_doc/...." _doc开头
  24. async function creatDirs(url) {
  25. let urllist = url.split("/");
  26. //创建文件夹
  27. let u = "";
  28. for (let i = 0; i < urllist.length - 1; i++) {
  29. let j = i;
  30. if (i == 0) {
  31. u = urllist[i];
  32. } else {
  33. u = u + "/" + urllist[i];
  34. }
  35. // console.log(i + "-------------------")
  36. // console.log(u)
  37. // console.log(urllist[j + 1])
  38. await CreateNewDir(u, urllist[j + 1]);
  39. }
  40. }
  41. //重命名目录或文件名
  42. function moveDirectyOrFile(srcUrl, dstUrl, newName) { //srcUrl需要移动的目录或文件,dstUrl要移动到的目标目录(父级)
  43. plus.io.resolveLocalFileSystemURL(srcUrl, function(srcEntry) {
  44. plus.io.resolveLocalFileSystemURL(dstUrl, function(dstEntry) {
  45. if (srcEntry.isDirectory) {
  46. srcEntry.moveTo(dstEntry, newName, function(entry) {
  47. //console.log("New Path: " + entry.fullPath);
  48. return true;
  49. }, function(e) {
  50. return e;
  51. //console.log(e.message);
  52. });
  53. } else {
  54. srcEntry.moveTo(dstEntry, newName, function(entry) {
  55. //console.log("New Path: " + entry.fullPath);
  56. return true;
  57. }, function(e) {
  58. return e;
  59. //console.log(e.message);
  60. });
  61. }
  62. }, function(e) {
  63. uni.showToast({
  64. title: '获取目标目录失败:' + e.message,
  65. duration: 2000,
  66. icon: 'none'
  67. });
  68. });
  69. }, function(e) {
  70. uni.showToast({
  71. title: '获取目录失败:' + e.message,
  72. duration: 2000,
  73. icon: 'none'
  74. });
  75. });
  76. }
  77. //创建一个新目录
  78. function CreateNewDir(url, dirName) {
  79. //url值可支持相对路径URL、本地路径URL
  80. return new Promise((resolver, reject) => {
  81. plus.io.resolveLocalFileSystemURL(url, function(entry) {
  82. entry.getDirectory(dirName, {
  83. create: true,
  84. exclusive: false
  85. }, function(dir) {
  86. resolver(true)
  87. }, function(error) {
  88. reject(error.message)
  89. uni.showToast({
  90. title: dirName + '目录创建失败:' + error.message,
  91. duration: 2000,
  92. icon: 'none'
  93. });
  94. });
  95. }, function(e) {
  96. reject(error.message)
  97. uni.showToast({
  98. title: '获取目录失败:' + e.message,
  99. duration: 2000,
  100. icon: 'none'
  101. });
  102. });
  103. })
  104. }
  105. /**
  106. * 复制文件
  107. * @param {String} url 文件地址,文件路径,最好是相对路径 url:"_doc/...." _doc开头
  108. * @param {String} newUrl 目标目录,最好是相对路径 url:"_doc/...." _doc开头
  109. * @param {String} newName 拷贝后的文件名称,默认为原始文件名称
  110. */
  111. function copyFileTo(url, newUrl, dirName, newName) {
  112. if (url.length >= 7 && "file://" == url.substring(0, 7)) {
  113. url = url.substring(7)
  114. }
  115. let tempUrl = url.substring(0, url.lastIndexOf('/'));
  116. let addUrl = newUrl + '/' + dirName;
  117. console.log(addUrl);
  118. if (addUrl == tempUrl) {
  119. return url;
  120. }
  121. return new Promise((resolve, reject) => {
  122. plus.io.resolveLocalFileSystemURL(url, async (entry) => {
  123. if (entry.isFile) {
  124. let c = await CreateNewDir(newUrl, dirName);
  125. let u = await getDirsys(addUrl)
  126. entry.copyTo(u, newName, en => {
  127. resolve(en.fullPath);
  128. }, e => {
  129. reject('错误:复制时出现错误')
  130. uni.showModal({
  131. title: "错误",
  132. content: "复制时出现错误"
  133. })
  134. })
  135. } else {
  136. reject('错误:路径必须是文件')
  137. uni.showModal({
  138. title: "错误",
  139. content: "路径必须是文件"
  140. })
  141. }
  142. }, (e) => {
  143. console.log(e);
  144. reject(e)
  145. uni.showModal({
  146. title: "错误",
  147. content: "打开文件系统时出错"
  148. })
  149. });
  150. })
  151. }
  152. //获取目录对象
  153. function getDirsys(url) {
  154. return new Promise((resolve, reject) => {
  155. plus.io.resolveLocalFileSystemURL(url, (entry) => {
  156. resolve(entry)
  157. }, (e) => {
  158. reject(e)
  159. console.log(e);
  160. });
  161. })
  162. }
  163. //将这些方法暴露出去
  164. export {
  165. saveFile,
  166. creatDirs,
  167. moveDirectyOrFile,
  168. copyFileTo,
  169. getDirsys,
  170. saveFileV2,
  171. CreateNewDir
  172. };