From 230937eba8263dc848e12ce9c2193fbdcd8b0933 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=96=BB=E5=8B=87=E7=A5=A5?= <237899745@qq.com> Date: Tue, 11 Nov 2025 16:09:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=8E=9F=E5=AF=86=E7=A0=81=E9=AA=8C=E8=AF=81UI=E5=B9=B6?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=AD=E6=96=87=E6=96=87=E4=BB=B6=E5=90=8D?= =?UTF-8?q?=E4=B9=B1=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 问题1: 修改密码缺少原密码验证UI 后端已有current_password验证,但前端没有输入框: - 用户无法输入当前密码 - 导致密码修改功能无法正常使用 修复内容(前端): 1. app.html: 添加当前密码输入框 2. app.js: - 添加current_password字段到data - 添加current_password必填验证 - 请求体中包含current_password - 成功后清空current_password ## 问题2: 中文文件名上传后乱码 原因: - multer默认将文件名从UTF-8转换为Latin1编码 - req.file.originalname获取到的是乱码 修复内容(后端): 1. 配置multer.diskStorage自定义文件名处理 2. 在filename回调中将Latin1转回UTF-8: Buffer.from(file.originalname, 'latin1').toString('utf8') 3. 在上传路由中同样转换originalname 4. 临时文件名使用时间戳+随机数+原始文件名避免冲突 影响范围: - 所有文件上传操作 - 中文、日文、韩文等非ASCII文件名 测试建议: - 上传中文文件名文件(如测试文档.pdf) - 上传emoji文件名 - 修改密码功能完整流程测试 --- backend/server.js | 8 +++++--- frontend/app.html | 4 ++++ frontend/app.js | 8 ++++++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/backend/server.js b/backend/server.js index 4ef0d64..389648f 100644 --- a/backend/server.js +++ b/backend/server.js @@ -840,9 +840,11 @@ app.post('/api/upload', authMiddleware, upload.single('file'), async (req, res) } const remotePath = req.body.path || '/'; + // 修复中文文件名:multer将UTF-8转为了Latin1,需要转回来 + const originalFilename = Buffer.from(req.file.originalname, 'latin1').toString('utf8'); const remoteFilePath = remotePath === '/' - ? `/${req.file.originalname}` - : `${remotePath}/${req.file.originalname}`; + ? `/${originalFilename}` + : `${remotePath}/${originalFilename}`; let storage; @@ -862,7 +864,7 @@ app.post('/api/upload', authMiddleware, upload.single('file'), async (req, res) res.json({ success: true, message: '文件上传成功', - filename: req.file.originalname, + filename: originalFilename, path: remoteFilePath }); } catch (error) { diff --git a/frontend/app.html b/frontend/app.html index 64d63cd..435bbcc 100644 --- a/frontend/app.html +++ b/frontend/app.html @@ -1069,6 +1069,10 @@