修复: 非标准端口部署时分享链接未携带端口号的问题

- 添加 generateShareUrl 辅助函数,智能处理端口号
- 支持通过 PUBLIC_PORT 环境变量配置nginx监听端口
- 更新 POST /api/share/create 使用新的URL生成方法
- 更新 GET /api/share/my 使用新的URL生成方法
- 修复IP模式部署时分享链接无法正常访问的问题
This commit is contained in:
WanWanYun
2025-11-11 23:23:48 +08:00
parent 88f2b152f6
commit 0c55b599ef

View File

@@ -222,6 +222,30 @@ function formatFileSize(bytes) {
return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i];
}
// 生成分享URL处理非标准端口
function generateShareUrl(req, shareCode) {
const protocol = req.protocol;
const host = req.get('host'); // 可能包含或不包含端口
// 如果 host 已经包含端口号,直接使用
if (host.includes(':')) {
return `${protocol}://${host}/s/${shareCode}`;
}
// 如果没有端口号,检查是否需要添加
// 从环境变量读取公开端口nginx监听的端口
const publicPort = process.env.PUBLIC_PORT || null;
// 如果配置了公开端口且不是标准端口80/443则添加端口号
if (publicPort && publicPort !== '80' && publicPort !== '443') {
return `${protocol}://${host}:${publicPort}/s/${shareCode}`;
}
// 标准端口或未配置,不添加端口号
return `${protocol}://${host}/s/${shareCode}`;
}
// ===== 公开API =====
// 健康检查
@@ -1209,7 +1233,7 @@ app.post('/api/share/create', authMiddleware, (req, res) => {
db.prepare('UPDATE shares SET storage_type = ? WHERE id = ?')
.run(req.user.current_storage_type || 'sftp', result.id);
const shareUrl = `${req.protocol}://${req.get('host')}/s/${result.share_code}`;
const shareUrl = generateShareUrl(req, result.share_code);
res.json({
success: true,
@@ -1236,7 +1260,7 @@ app.get('/api/share/my', authMiddleware, (req, res) => {
success: true,
shares: shares.map(share => ({
...share,
share_url: `${req.protocol}://${req.get('host')}/s/${share.share_code}`
share_url: generateShareUrl(req, share.share_code)
}))
});
} catch (error) {