提交 1e7bb6be authored 作者: caodi\cd's avatar caodi\cd

fix:提交

上级 9130d61f
......@@ -134,7 +134,9 @@ export default {
deleteAllFilesInDirectory(targetPath).then(() => {
// 复制
copyImagesToFolder(imagePaths, targetPath).then((res) => {
console.log("图片复制后", res);
uni.navigateTo({
url: "/pages/listingManagement/index?backValue=home",
})
});
});
},
......@@ -194,10 +196,10 @@ export default {
this.updateSysTime();
// this.getDetails();
},
2 * 1000,
uni.navigateTo({
url: "/pages/listingManagement/index?backValue=home",
})
2 * 1000
// uni.navigateTo({
// url: "/pages/listingManagement/index?backValue=home",
// })
);
// })
// .catch((error) => {
......
......@@ -348,151 +348,121 @@ export function copyDirectory(sourceDirectoryPath, targetDirectoryPath) {
);
});
}
// 复制多张图片到指定目录的函数(带权限请求)
export function copyImagesToFolder(sourcePaths, targetDir) {
// 第一步:检查运行环境是否支持plus API
if (!window.plus || !plus.io) {
console.error("[文件操作] 当前环境不支持plus API");
return Promise.reject(new Error("当前环境不支持plus API"));
}
return new Promise((resolve, reject) => {
// 1. 环境检查
// if (!window.plus || !plus.io) {
// const err = new Error("当前环境不支持plus API");
// console.error(err);
// reject(err);
// return;
// }
console.log("[文件操作] 开始复制文件:", sourcePaths, "->", targetDir);
console.log("开始复制文件...");
// 返回Promise以便调用者可以await或then/catch
return new Promise((resolve, reject) => {
// 第二步:检查并请求权限
// 2. 权限请求
requestFilePermission()
.then(() => {
// 权限已授予,准备目标目录
prepareTargetDirectory(
targetDir,
(dirEntry) => {
// 目标目录准备好后,开始复制所有文件
const copyPromises = sourcePaths.map((sourcePath) => {
return copySingleImage(sourcePath, dirEntry);
});
// 等待所有复制操作完成
Promise.all(copyPromises)
.then((results) => {
console.log("[文件操作] 所有文件复制完成");
resolve(results);
})
.catch((error) => {
console.error("[文件操作] 部分文件复制失败:", error);
reject(error);
});
},
(error) => {
console.error("[文件操作] 准备目标目录失败:", error.message);
reject(error);
}
);
console.log("权限已获取,准备目录...");
return prepareTargetDirectory(targetDir);
})
.catch((error) => {
console.error("[文件操作] 权限请求失败:", error.message);
reject(error);
.then(dirEntry => {
console.log("目录准备完成,开始复制...");
const copies = sourcePaths.map(path => copySingleFile(path, dirEntry));
return Promise.all(copies);
})
.then(results => {
console.log("所有文件复制成功", results);
resolve(results);
})
.catch(err => {
console.error("复制过程出错:", err);
reject(err);
});
});
}
// 请求文件系统权限
// 请求权限(返回Promise)
function requestFilePermission() {
return new Promise((resolve, reject) => {
// 检查是否已有权限
if (plus.os.name === 'iOS') {
resolve(); // iOS可能不需要显式请求
return;
}
plus.android.requestPermissions(
[
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE"
],
function (result) {
// 检查权限是否被授予
const granted = Object.values(result.granted).every(Boolean);
if (granted) {
console.log("[文件操作] 文件权限已授予");
function(result) {
if (Object.values(result.granted).every(Boolean)) {
resolve();
} else {
console.error("[文件操作] 文件权限被拒绝");
reject(new Error("用户拒绝了文件访问权限"));
reject(new Error("用户拒绝了文件权限"));
}
},
function (error) {
console.error("[文件操作] 权限请求错误:", error);
function(error) {
reject(error);
}
);
});
}
// 准备目标目录
function prepareTargetDirectory(targetDir, successCallback, errorCallback) {
plus.io.resolveLocalFileSystemURL(
targetDir,
function (dirEntry) {
// 目标目录已存在
console.log("[文件操作] 目标目录已存在");
successCallback(dirEntry);
},
function (e) {
// 目标目录不存在,尝试创建
console.log("[文件操作] 目标目录不存在,尝试创建...");
plus.io.requestFileSystem(
plus.io.PUBLIC_DOCUMENTS,
function (fs) {
// 创建目录
fs.root.getDirectory(
targetDir,
{
create: true,
},
function (dirEntry) {
console.log("[文件操作] 目标目录创建成功");
successCallback(dirEntry);
},
function (error) {
errorCallback(error);
}
);
},
function (error) {
errorCallback(error);
}
);
}
);
// 准备目录(返回Promise)
function prepareTargetDirectory(targetDir) {
return new Promise((resolve, reject) => {
plus.io.resolveLocalFileSystemURL(
targetDir,
function(dirEntry) {
resolve(dirEntry); // 目录已存在
},
function() {
// 目录不存在则创建
plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS,
function(fs) {
fs.root.getDirectory(
targetDir,
{ create: true },
function(dirEntry) {
resolve(dirEntry);
},
function(error) {
reject(error);
}
);
},
function(error) {
reject(error);
}
);
}
);
});
}
// 复制单个图片(返回Promise)
function copySingleImage(sourcePath, targetDirEntry) {
// 复制单个文件(返回Promise)
function copySingleFile(sourcePath, targetDirEntry) {
return new Promise((resolve, reject) => {
plus.io.resolveLocalFileSystemURL(
sourcePath,
function (entry) {
// 源文件存在,开始复制
console.log("[文件操作] 源文件存在:", sourcePath);
// 获取文件名
const fileName = sourcePath.substring(sourcePath.lastIndexOf("/") + 1);
console.log("[文件操作] 文件名:", fileName);
// 执行复制操作
function(entry) {
const fileName = sourcePath.split('/').pop();
entry.copyTo(
targetDirEntry,
fileName,
function (newEntry) {
console.log("[文件操作] 文件复制成功,新路径:", newEntry.fullPath);
resolve(newEntry.fullPath);
function(newEntry) {
resolve(newEntry.toURL());
},
function (error) {
console.error("[文件操作] 文件复制失败:", error.message);
function(error) {
reject(error);
}
);
},
function (e) {
// 源文件不存在或无法访问
console.error("[文件操作] 源文件不存在或无法访问:", e.message);
reject(e);
function(error) {
reject(error);
}
);
});
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论