From 0c55b599ef7f641caf5bdce14723166da57baee9 Mon Sep 17 00:00:00 2001 From: WanWanYun Date: Tue, 11 Nov 2025 23:23:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=20=E9=9D=9E=E6=A0=87?= =?UTF-8?q?=E5=87=86=E7=AB=AF=E5=8F=A3=E9=83=A8=E7=BD=B2=E6=97=B6=E5=88=86?= =?UTF-8?q?=E4=BA=AB=E9=93=BE=E6=8E=A5=E6=9C=AA=E6=90=BA=E5=B8=A6=E7=AB=AF?= =?UTF-8?q?=E5=8F=A3=E5=8F=B7=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 generateShareUrl 辅助函数,智能处理端口号 - 支持通过 PUBLIC_PORT 环境变量配置nginx监听端口 - 更新 POST /api/share/create 使用新的URL生成方法 - 更新 GET /api/share/my 使用新的URL生成方法 - 修复IP模式部署时分享链接无法正常访问的问题 --- backend/server.js | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/backend/server.js b/backend/server.js index 6121a3e..f847852 100644 --- a/backend/server.js +++ b/backend/server.js @@ -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) {