diff --git a/frontend/src/components/Modals/ManageWorkspace/Documents/Directory/index.jsx b/frontend/src/components/Modals/ManageWorkspace/Documents/Directory/index.jsx
index fdf0390..a9cbbc2 100644
--- a/frontend/src/components/Modals/ManageWorkspace/Documents/Directory/index.jsx
+++ b/frontend/src/components/Modals/ManageWorkspace/Documents/Directory/index.jsx
@@ -66,7 +66,8 @@ function Directory({
for (const folder of files.items) {
const foundItem = folder.items.find((file) => file.id === itemId);
if (foundItem) {
- toRemove.push(`${folder.name}/${foundItem.name}`);
+ // toRemove.push(`${folder.name}/${foundItem.name}`);
+ toRemove.push(`${foundItem.relativePath}`);
break;
}
}
diff --git a/frontend/src/components/Modals/ManageWorkspace/Documents/UploadFile/index.jsx b/frontend/src/components/Modals/ManageWorkspace/Documents/UploadFile/index.jsx
index fdd7371..508fae8 100644
--- a/frontend/src/components/Modals/ManageWorkspace/Documents/UploadFile/index.jsx
+++ b/frontend/src/components/Modals/ManageWorkspace/Documents/UploadFile/index.jsx
@@ -151,8 +151,7 @@ export default function UploadFile({
- 这些文件将被上传到运行于此的文档处理器上
- AnythingLLM实例。这些文件不会发送或与第三方共享
+ 这些文件不会发送或与第三方共享,请放心使用。
);
diff --git a/server/downloaded_localFile b/server/downloaded_localFile
new file mode 100644
index 0000000..984cb36
Binary files /dev/null and b/server/downloaded_localFile differ
diff --git a/server/endpoints/system.js b/server/endpoints/system.js
index 9d4af42..4521ba7 100644
--- a/server/endpoints/system.js
+++ b/server/endpoints/system.js
@@ -391,17 +391,40 @@ function systemEndpoints(app) {
}
);
+ // app.delete(
+ // "/system/remove-documents",
+ // [validatedRequest, flexUserRoleValid([ROLES.admin, ROLES.manager])],
+ // async (request, response) => {
+ // try {
+ // const { names } = reqBody(request);
+ // console.log("names", names);
+ // for await (const name of names) await purgeDocument(name);
+ // response.sendStatus(200).end();
+ // } catch (e) {
+ // console.error(e.message, e);
+ // response.sendStatus(500).end();
+ // }
+ // }
+ // );
+
app.delete(
"/system/remove-documents",
[validatedRequest, flexUserRoleValid([ROLES.admin, ROLES.manager])],
async (request, response) => {
try {
- const { names } = reqBody(request);
- for await (const name of names) await purgeDocument(name);
- response.sendStatus(200).end();
+ const { names } = reqBody(request); // 获取请求体中的文件名列表
+ console.log("names", names);
+
+ // 遍历文件名列表,调用 purgeDocument 方法
+ for (const name of names) {
+ await purgeDocument(name);
+ }
+
+ // 返回成功响应
+ response.status(200).json({ success: true, message: "Documents removed successfully." });
} catch (e) {
console.error(e.message, e);
- response.sendStatus(500).end();
+ response.status(500).json({ success: false, error: e.message });
}
}
);
diff --git a/server/endpoints/workspaces.js b/server/endpoints/workspaces.js
index b74379a..5888e8a 100644
--- a/server/endpoints/workspaces.js
+++ b/server/endpoints/workspaces.js
@@ -39,6 +39,7 @@ const { DeptUsers } = require("../models/deptUsers");
const { DeptDocument } = require("../models/deptDocument");
const { v4: uuidv4 } = require("uuid");
const { moveAndRenameFile } = require("../utils/files/index");
+const moment = require('moment'); // 引入时间格式化库
function workspaceEndpoints(app) {
if (!app) return;
@@ -288,11 +289,6 @@ function workspaceEndpoints(app) {
fs.mkdirSync(targetDir, { recursive: true }); // 递归创建目录
}
- // 保存文件
- const filePath = path.join(targetDir, originalname); // 使用原始文件名
- const fileBuffer = Buffer.from(fileContent, "base64");
- fs.writeFileSync(filePath, fileBuffer);
-
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// 假设路径字符串
const location = documents[0].location;
@@ -303,7 +299,14 @@ function workspaceEndpoints(app) {
// 提取文件名
const parsedFileName = unixStylePath.substring(lastIndex + 1);
const fileExtension = path.extname(request.file.path).toLowerCase();
- const newFileName = uuidv4() + fileExtension; // 新文件名
+ // const newFileName = uuidv4() + fileExtension; // 新文件名
+ const newFileName = `${uuidv4()}_${moment().format('YYYYMMDD_HHmmss')}${fileExtension}`; // 生成唯一文件名
+
+ // 保存文件
+ const filePath = path.join(targetDir, newFileName); // 使用原始文件名
+ const fileBuffer = Buffer.from(fileContent, "base64");
+ fs.writeFileSync(filePath, fileBuffer);
+
const deptDocData = {
deptId: deptUserRecord.deptUser.deptId,
parsedFileName: parsedFileName,
diff --git a/server/models/deptDocument.js b/server/models/deptDocument.js
index 0fbf534..e26a911 100644
--- a/server/models/deptDocument.js
+++ b/server/models/deptDocument.js
@@ -220,6 +220,44 @@ const DeptDocument = {
throw error;
}
},
+ /**
+ * 根据 parsedFilePath 模糊查询数据,并将 delTag 更新为 true
+ * @param {string} parsedFilePath - 模糊查询的路径
+ * @returns {Promise<{ success: boolean, error: string | null, count: number }>}
+ */
+ softDeleteByParsedFilePath: async function (parsedFilePath) {
+ try {
+ if (!parsedFilePath) {
+ throw new Error("parsedFilePath is required");
+ }
+
+ // 模糊查询 parsedFilePath
+ const result = await prisma.dept_document.updateMany({
+ where: {
+ parsedFilePath: {
+ contains: parsedFilePath, // 模糊匹配
+ },
+ },
+ data: {
+ delTag: true, // 将 delTag 更新为 true
+ lastUpdatedAt: new Date(), // 更新最后修改时间
+ },
+ });
+
+ return {
+ success: true,
+ error: null,
+ count: result.count, // 返回更新的记录数
+ };
+ } catch (error) {
+ console.error("FAILED TO SOFT DELETE BY PARSED FILE PATH.", error.message);
+ return {
+ success: false,
+ error: error.message,
+ count: 0,
+ };
+ }
+ },
};
module.exports = { DeptDocument };
diff --git a/server/storage/localFile/cebc49a6-9df4-46cc-8ba5-672b5d72de0e.txt b/server/storage/localFile/cebc49a6-9df4-46cc-8ba5-672b5d72de0e.txt
deleted file mode 100644
index f3ca610..0000000
--- a/server/storage/localFile/cebc49a6-9df4-46cc-8ba5-672b5d72de0e.txt
+++ /dev/null
@@ -1 +0,0 @@
-你好
\ No newline at end of file
diff --git a/server/storage/localFile/f51243b3-13e6-4374-8b64-a7fa4ba38ed9.txt b/server/storage/localFile/f51243b3-13e6-4374-8b64-a7fa4ba38ed9.txt
deleted file mode 100644
index 43a1c3f..0000000
--- a/server/storage/localFile/f51243b3-13e6-4374-8b64-a7fa4ba38ed9.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-一、数字驼乡
-
-1、政策类型修改增删改查接口的逻辑
-2、服务事项主题分类增删改查逻辑修改,信息发布修改数据库字段类型
-3、政策内容id改成UUID, 行业资讯id修改为UUID,政策解读ID修改为UUID,用户注册校验用户名是否重复, 商家信息新增和更新时校验商家名称和统一社会信用代码
-4、商家信息添加字段:其他证照,商家信息添加字段:审核状态,审核时间,审核人,审核反馈; 商家资质添加字段:审核人
-5、添加商家信息图标
-7、政企服务建表,页面和路由生成,后端新开一个微服务
-8、配合赵洋做商家信息相关的问题
-9、 添加5个图标供参考
-10、生成提问和反馈的页面和路由
-11、商家信息修改时校验审核状态
-12、提问反馈的页面字段错误问题和提问反馈的关联用户ID问题
-13、修复商家信息和行业类型,行政区划实体里面的对应混乱问题
-二、盟林草-森林保险管理系统
-
-1、修改上次测出问题,部署
-三、社会治理联动指挥平台(一期)
-
-1、修复导航权限问题,部署
\ No newline at end of file
diff --git a/server/utils/files/purgeDocument.js b/server/utils/files/purgeDocument.js
index b0c295a..186854d 100644
--- a/server/utils/files/purgeDocument.js
+++ b/server/utils/files/purgeDocument.js
@@ -9,10 +9,42 @@ const {
} = require(".");
const { Document } = require("../../models/documents");
const { Workspace } = require("../../models/workspace");
+const { DeptDocument } = require("../../models/deptDocument");
+
+// async function purgeDocument(filename = null) {
+// if (!filename || !normalizePath(filename)) return;
+//
+// await purgeVectorCache(filename);
+// await purgeSourceDocument(filename);
+// const workspaces = await Workspace.where();
+// for (const workspace of workspaces) {
+// await Document.removeDocuments(workspace, [filename]);
+// }
+// return;
+// }
async function purgeDocument(filename = null) {
if (!filename || !normalizePath(filename)) return;
+ // 根据环境转换分隔符
+ let normalizedFilename = filename;
+ if (process.env.NODE_ENV === "development") {
+ // 开发环境:将路径分隔符转换为 Windows 风格(\)
+ normalizedFilename = filename.replace(/\//g, "\\");
+ } else {
+ // 生产环境:将路径分隔符转换为 Unix 风格(/)
+ normalizedFilename = filename.replace(/\\/g, "/");
+ }
+
+ // 标记匹配的文件为逻辑删除
+ const { success, error, count } = await DeptDocument.softDeleteByParsedFilePath(normalizedFilename);
+ if (!success) {
+ console.error("Failed to soft delete documents:", error);
+ return;
+ }
+ console.log(`Successfully marked ${count} documents as deleted.`);
+
+ // 继续执行原有的清理逻辑
await purgeVectorCache(filename);
await purgeSourceDocument(filename);
const workspaces = await Workspace.where();