diff --git a/front/src/TorrentDetailPage.js b/front/src/TorrentDetailPage.js
index 8d3ee43..a23dce7 100644
--- a/front/src/TorrentDetailPage.js
+++ b/front/src/TorrentDetailPage.js
@@ -4,81 +4,14 @@
 
 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' }}>标题: {detail.title || `种子${torrentId}`}</h2>
-      <p style={{ fontSize: 'inherit', textAlign: 'left' }}>简介: {detail.description || `这是种子${torrentId}的详细信息。`}</p>
+      <h2 style={{ fontSize: 'inherit', fontWeight: 'normal', textAlign: 'left' }}>标题: 种子{torrentId}</h2>
+      <p style={{ fontSize: 'inherit', textAlign: 'left' }}>简介: 这是种子{torrentId}的详细信息。</p>
       <div style={{ textAlign: 'center', marginTop: '20px' }}>
-        <button 
-          style={{ 
-            padding: '10px 20px', 
-            fontSize: '16px', 
-            cursor: 'pointer', 
-            backgroundColor: '#d3f0ff', 
-            border: 'none', 
-            borderRadius: '4px' 
-          }} 
-          onClick={handleClick}
-        >
+        <button style={{ padding: '10px 20px', fontSize: '16px', cursor: 'pointer', backgroundColor: '#d3f0ff', border: 'none', borderRadius: '4px' }}>
           下载
         </button>
       </div>
