🐛 修复文件夹分享bug - 只显示第一个文件的问题

问题:
- 分享文件夹时,分享链接只显示文件夹内第一个文件
- 原因:前端无论文件还是文件夹都使用share_type='file'
- 后端对非file类型的分享路径处理不正确

修复方案:
1. 前端修改(frontend/app.js):
   - shareFileForm添加isDirectory字段标记是否为文件夹
   - openShareFileModal设置isDirectory值
   - createShareFile根据isDirectory设置正确的share_type
     * 文件: share_type='file'
     * 文件夹: share_type='directory'

2. 后端修改(backend/database.js):
   - 修复ShareDB.create中的sharePath逻辑
   - file类型:使用file_path(单文件路径)
   - directory类型:使用file_path(文件夹路径)
   - all类型:使用'/'(根目录)

测试:
- 分享单个文件:正常显示单个文件
- 分享文件夹:正常显示文件夹内所有文件
- 分享所有文件:正常显示根目录所有文件
This commit is contained in:
2025-11-18 17:58:31 +08:00
parent 746539a067
commit 7d1cb7b506
2 changed files with 22 additions and 4 deletions

View File

@@ -320,7 +320,19 @@ const ShareDB = {
`);
const hashedPassword = password ? bcrypt.hashSync(password, 10) : null;
const sharePath = share_type === 'file' ? file_path : '/';
// 修复:正确处理不同类型的分享路径
let sharePath;
if (share_type === 'file') {
// 单文件分享:使用完整文件路径
sharePath = file_path;
} else if (share_type === 'directory') {
// 文件夹分享:使用文件夹路径
sharePath = file_path;
} else {
// all类型分享根目录
sharePath = '/';
}
const result = stmt.run(
userId,

View File

@@ -65,6 +65,7 @@ createApp({
shareFileForm: {
fileName: "",
filePath: "",
isDirectory: false, // 新增:标记是否为文件夹
password: "",
expiryType: "never",
customDays: 7
@@ -1175,6 +1176,7 @@ handleDragLeave(e) {
this.shareFileForm.filePath = this.currentPath === '/'
? file.name
: `${this.currentPath}/${file.name}`;
this.shareFileForm.isDirectory = file.isDirectory; // 设置是否为文件夹
this.shareFileForm.password = '';
this.shareFileForm.expiryType = 'never';
this.shareFileForm.customDays = 7;
@@ -1215,10 +1217,13 @@ handleDragLeave(e) {
this.shareFileForm.expiryType === 'custom' ? this.shareFileForm.customDays :
parseInt(this.shareFileForm.expiryType);
// 根据是否为文件夹决定share_type
const shareType = this.shareFileForm.isDirectory ? 'directory' : 'file';
const response = await axios.post(
`${this.apiBase}/api/share/create`,
{
share_type: 'file',
share_type: shareType, // 修复文件夹使用directory类型
file_path: this.shareFileForm.filePath,
file_name: this.shareFileForm.fileName,
password: this.shareFileForm.password || null,
@@ -1229,7 +1234,8 @@ handleDragLeave(e) {
if (response.data.success) {
this.shareResult = response.data;
this.showToast('success', '成功', '文件分享链接已创建');
const itemType = this.shareFileForm.isDirectory ? '文件夹' : '文件';
this.showToast('success', '成功', `${itemType}分享链接已创建`);
this.loadShares();
}
} catch (error) {