修复: 添加原密码验证UI并修复中文文件名乱码

## 问题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文件名
- 修改密码功能完整流程测试
This commit is contained in:
2025-11-11 16:09:49 +08:00
parent 9eade3e3e6
commit 230937eba8
3 changed files with 17 additions and 3 deletions

View File

@@ -43,6 +43,7 @@ createApp({
// 修改密码表单
changePasswordForm: {
current_password: '',
new_password: ''
},
// 用户名修改表单
@@ -407,6 +408,11 @@ handleDragLeave(e) {
},
async changePassword() {
if (!this.changePasswordForm.current_password) {
alert('请输入当前密码');
return;
}
if (this.changePasswordForm.new_password.length < 6) {
alert('新密码至少6个字符');
return;
@@ -416,6 +422,7 @@ handleDragLeave(e) {
const response = await axios.post(
`${this.apiBase}/api/user/change-password`,
{
current_password: this.changePasswordForm.current_password,
new_password: this.changePasswordForm.new_password
},
{ headers: { Authorization: `Bearer ${this.token}` } }
@@ -424,6 +431,7 @@ handleDragLeave(e) {
if (response.data.success) {
alert('密码修改成功!');
this.changePasswordForm.new_password = '';
this.changePasswordForm.current_password = '';
}
} catch (error) {
alert('密码修改失败: ' + (error.response?.data?.message || error.message));