diff --git a/backend/routes/backup.js b/backend/routes/backup.js index 2cce834..b6e7bfa 100644 --- a/backend/routes/backup.js +++ b/backend/routes/backup.js @@ -798,6 +798,59 @@ router.delete('/remote/targets/:id', (req, res) => { } }); +// 直接测试远端连接(不保存,用于添加节点前的测试) +router.post('/remote/test', async (req, res) => { + try { + const config = req.body; + console.log(`[RemoteBackup] 收到连接测试请求:`, JSON.stringify(config)); + + if (!config.host || !config.port || !config.username) { + return res.status(400).json({ + success: false, + message: '请提供完整的连接信息(主机、端口、用户名)', + }); + } + + if (!config.protocol) { + const port = parseInt(config.port); + if (port === 22 || port === 2222) { + config.protocol = 'sftp'; + } else if (port === 445 || port === 139 || port === 443) { + config.protocol = 'smb'; + } else if (port === 80 || port === 443 || config.url) { + config.protocol = 'webdav'; + } else { + config.protocol = 'ftp'; + } + console.log(`[RemoteBackup] 推断协议类型: ${config.protocol} (基于端口 ${config.port})`); + } + + const result = await testRemoteConnection(config); + console.log(`[RemoteBackup] 连接测试结果:`, JSON.stringify(result)); + + if (result.success) { + res.json({ + success: true, + message: '连接测试成功', + data: result, + }); + } else { + res.status(500).json({ + success: false, + message: result.message, + error: result.error, + }); + } + } catch (error) { + console.error('[RemoteBackup] 测试远端连接失败:', error); + res.status(500).json({ + success: false, + message: '测试远端连接失败', + error: error.message, + }); + } +}); + // 测试远端连接 router.post('/remote/targets/:id/test', async (req, res) => { try { diff --git a/frontend/src/pages/RemoteBackupSettings.jsx b/frontend/src/pages/RemoteBackupSettings.jsx index cd4d51f..003ba74 100644 --- a/frontend/src/pages/RemoteBackupSettings.jsx +++ b/frontend/src/pages/RemoteBackupSettings.jsx @@ -293,8 +293,10 @@ const RemoteBackupSettings = () => { try { setTesting(true); setTestStatus('testing'); - - const values = await form.validateFields(); + + await form.validateFields(); + const values = form.getFieldsValue(true); + console.log('[TestConnection] getFieldsValue(true):', JSON.stringify(values)); const response = await api.post('/backup/remote/test', values); if (response?.success) { @@ -832,7 +834,20 @@ const RemoteBackupSettings = () => { placeholder="选择协议类型" size="large" onChange={() => { - form.setFieldsValue({}); + form.setFieldsValue({ + host: undefined, + port: undefined, + username: undefined, + password: undefined, + secure: undefined, + privateKey: undefined, + passphrase: undefined, + share: undefined, + domain: undefined, + url: undefined, + authType: undefined, + rootPath: '/', + }); setTestStatus(null); }} >