用户资料接口添加

Change-Id: Id55e7fef307ec1663bb7a05cfbf7f81e097ac767
diff --git a/front/src/TorrentDetailPage.js b/front/src/TorrentDetailPage.js
index a23dce7..8d3ee43 100644
--- a/front/src/TorrentDetailPage.js
+++ b/front/src/TorrentDetailPage.js
@@ -4,14 +4,81 @@
 

 export default function TorrentDetailPage() {

   const { torrentId } = useParams();

+  const [detail, setDetail] = React.useState(null);

+  const [loading, setLoading] = React.useState(true);

+  const [error, setError] = React.useState(null);

+  // 假设你从某个地方获取了 userId(例如登录状态、localStorage 等)

+  const [userId] = React.useState('user1550e8400-e29b-41d4-a716-44665544000023'); // 替换为实际的用户 ID

+

+  const handleClick = () => {

+    // 构造下载 URL,包含 userId 和 torrentId 参数

+    console.log(torrentId)

+    const downloadUrl = `http://192.168.5.9:8080/api/get-torrent?userId=${encodeURIComponent(userId)}&torrentId=${encodeURIComponent(torrentId)}`;

+    

+    // 发起 GET 请求下载文件

+    fetch(downloadUrl)

+      .then(response => {

+        if (!response.ok) {

+          throw new Error('下载失败');

+        }

+        return response.blob();

+      })

+      .then(blob => {

+        // 创建下载链接并触发下载

+        const url = window.URL.createObjectURL(blob);

+        const a = document.createElement('a');

+        a.href = url;

+        a.download = `torrent-${torrentId}.torrent`;

+        document.body.appendChild(a);

+        a.click();

+        window.URL.revokeObjectURL(url);

+        document.body.removeChild(a);

+      })

+      .catch(error => {

+        console.error('下载错误:', error);

+        alert('下载失败: ' + error.message);

+      });

+  };

+

+  React.useEffect(() => {

+    setLoading(true);

+    setError(null);

+    fetch(`http://192.168.5.9:8080/api/torrent-detail?id=${encodeURIComponent(torrentId)}`)

+      .then(res => {

+        if (!res.ok) throw new Error('网络错误');

+        return res.json();

+      })

+      .then(data => {

+        setDetail(data);

+        setLoading(false);

+      })

+      .catch(err => {

+        setError(err.message);

+        setLoading(false);

+      });

+  }, [torrentId]);

+

+  if (loading) return <div className="container"><h1>加载中...</h1></div>;

+  if (error) return <div className="container"><h1>加载失败: {error}</h1></div>;

+  if (!detail) return <div className="container"><h1>未找到详情</h1></div>;

 

   return (

     <div className="container">

       <h1>种子详情页</h1>

-      <h2 style={{ fontSize: 'inherit', fontWeight: 'normal', textAlign: 'left' }}>标题: 种子{torrentId}</h2>

-      <p style={{ fontSize: 'inherit', textAlign: 'left' }}>简介: 这是种子{torrentId}的详细信息。</p>

+      <h2 style={{ fontSize: 'inherit', fontWeight: 'normal', textAlign: 'left' }}>标题: {detail.title || `种子${torrentId}`}</h2>

+      <p style={{ fontSize: 'inherit', textAlign: 'left' }}>简介: {detail.description || `这是种子${torrentId}的详细信息。`}</p>

       <div style={{ textAlign: 'center', marginTop: '20px' }}>

-        <button style={{ padding: '10px 20px', fontSize: '16px', cursor: 'pointer', backgroundColor: '#d3f0ff', border: 'none', borderRadius: '4px' }}>

+        <button 

+          style={{ 

+            padding: '10px 20px', 

+            fontSize: '16px', 

+            cursor: 'pointer', 

+            backgroundColor: '#d3f0ff', 

+            border: 'none', 

+            borderRadius: '4px' 

+          }} 

+          onClick={handleClick}

+        >

           下载

         </button>

       </div>