/** * 储存文件到指定的地址:把一个文件移动到另外一个位置 剪切文件 重命名文件 * @param {String} url 新的地址 _doc/ 开头 * @param {String} file 原文件地址 * @param {String} newfilename 新的文件名 */ async function saveFile(url, file, newfilename) { await creatDirs(url) let isokm = moveDirectyOrFile(file, url + "/", newfilename); return isokm } /** * 储存文件到指定的地址:把一个文件复制到另外一个位置 复制文件 重命名文件 * @param {String} url 新的地址 _doc/ 开头 * @param {String} file 原文件地址 * @param {String} newfilename 新的文件名 */ async function saveFileV2(url, file, dirName , newfilename) { await creatDirs(url) let isokm = copyFileTo(file, url, dirName , newfilename); return isokm } //循环创建目录 url:"_doc/...." _doc开头 async function creatDirs(url) { let urllist = url.split("/"); //创建文件夹 let u = ""; for (let i = 0; i < urllist.length - 1; i++) { let j = i; if (i == 0) { u = urllist[i]; } else { u = u + "/" + urllist[i]; } // console.log(i + "-------------------") // console.log(u) // console.log(urllist[j + 1]) await CreateNewDir(u, urllist[j + 1]); } } //重命名目录或文件名 function moveDirectyOrFile(srcUrl, dstUrl, newName) { //srcUrl需要移动的目录或文件,dstUrl要移动到的目标目录(父级) plus.io.resolveLocalFileSystemURL(srcUrl, function(srcEntry) { plus.io.resolveLocalFileSystemURL(dstUrl, function(dstEntry) { if (srcEntry.isDirectory) { srcEntry.moveTo(dstEntry, newName, function(entry) { //console.log("New Path: " + entry.fullPath); return true; }, function(e) { return e; //console.log(e.message); }); } else { srcEntry.moveTo(dstEntry, newName, function(entry) { //console.log("New Path: " + entry.fullPath); return true; }, function(e) { return e; //console.log(e.message); }); } }, function(e) { uni.showToast({ title: '获取目标目录失败:' + e.message, duration: 2000, icon: 'none' }); }); }, function(e) { uni.showToast({ title: '获取目录失败:' + e.message, duration: 2000, icon: 'none' }); }); } //创建一个新目录 function CreateNewDir(url, dirName) { //url值可支持相对路径URL、本地路径URL return new Promise((resolver, reject) => { plus.io.resolveLocalFileSystemURL(url, function(entry) { entry.getDirectory(dirName, { create: true, exclusive: false }, function(dir) { resolver(true) }, function(error) { reject(error.message) uni.showToast({ title: dirName + '目录创建失败:' + error.message, duration: 2000, icon: 'none' }); }); }, function(e) { reject(error.message) uni.showToast({ title: '获取目录失败:' + e.message, duration: 2000, icon: 'none' }); }); }) } /** * 复制文件 * @param {String} url 文件地址,文件路径,最好是相对路径 url:"_doc/...." _doc开头 * @param {String} newUrl 目标目录,最好是相对路径 url:"_doc/...." _doc开头 * @param {String} newName 拷贝后的文件名称,默认为原始文件名称 */ function copyFileTo(url, newUrl, dirName, newName) { if (url.length >= 7 && "file://" == url.substring(0, 7)) { url = url.substring(7) } let tempUrl = url.substring(0, url.lastIndexOf('/')); let addUrl = newUrl + '/' + dirName; console.log(addUrl); if (addUrl == tempUrl) { return url; } return new Promise((resolve, reject) => { plus.io.resolveLocalFileSystemURL(url, async (entry) => { if (entry.isFile) { let c = await CreateNewDir(newUrl, dirName); let u = await getDirsys(addUrl) entry.copyTo(u, newName, en => { resolve(en.fullPath); }, e => { reject('错误:复制时出现错误') uni.showModal({ title: "错误", content: "复制时出现错误" }) }) } else { reject('错误:路径必须是文件') uni.showModal({ title: "错误", content: "路径必须是文件" }) } }, (e) => { console.log(e); reject(e) uni.showModal({ title: "错误", content: "打开文件系统时出错" }) }); }) } //获取目录对象 function getDirsys(url) { return new Promise((resolve, reject) => { plus.io.resolveLocalFileSystemURL(url, (entry) => { resolve(entry) }, (e) => { reject(e) console.log(e); }); }) } //将这些方法暴露出去 export { saveFile, creatDirs, moveDirectyOrFile, copyFileTo, getDirsys, saveFileV2, CreateNewDir };