diff --git a/src/pages/PublishSeed/PublishSeed.jsx b/src/pages/PublishSeed/PublishSeed.jsx
index e3be08c..f27ebc2 100644
--- a/src/pages/PublishSeed/PublishSeed.jsx
+++ b/src/pages/PublishSeed/PublishSeed.jsx
@@ -1,4 +1,4 @@
-import React, { useState } from 'react';
+import React, { useState, useRef } from 'react';
 import axios from 'axios';
 import Header from '../../components/Header';
 import './PublishSeed.css';
@@ -9,23 +9,36 @@
   const [description, setDescription] = useState('');
   const [tags, setTags] = useState([]);
   const [category, setCategory] = useState('movie');
-  const [file, setFile] = useState(null);
   const [imageUrl, setImageUrl] = useState('');
   const [message, setMessage] = useState('');
   const [isLoading, setIsLoading] = useState(false);
+  const [fileName, setFileName] = useState('');
 
-  const { user } = useUser(); // 从上下文中获取当前登录用户信息
+  const fileInputRef = useRef(null); // ✅ 获取 input file 引用
+  const { user } = useUser();
 
   const handleTagsChange = (e) => {
     setTags(e.target.value.split(',').map(tag => tag.trim()));
   };
 
+  const handleFileButtonClick = () => {
+    fileInputRef.current?.click(); // 点击隐藏的 input
+  };
+
   const handleFileChange = (e) => {
-    setFile(e.target.files[0]);
+    const selectedFile = e.target.files[0];
+    if (selectedFile) {
+      setFileName(selectedFile.name); // 仅展示文件名
+    }
   };
 
   const handleSubmit = async (e) => {
     e.preventDefault();
+    console.log('[handleSubmit] 表单提交开始');
+
+    const currentFile = fileInputRef.current?.files[0]; // ✅ 获取文件
+    console.log('[handleSubmit] currentFile:', currentFile);
+
     setIsLoading(true);
     setMessage('');
 
@@ -35,20 +48,20 @@
       return;
     }
 
-    if (!file || !file.name.endsWith('.torrent')) {
+    if (!currentFile || !currentFile.name.toLowerCase().endsWith('.torrent')) {
       setMessage('请上传一个 .torrent 文件');
       setIsLoading(false);
       return;
     }
 
     const formData = new FormData();
-    formData.append('file', file); // 文件字段
+    formData.append('file', currentFile);
     formData.append('title', title);
     formData.append('description', description);
     formData.append('category', category);
     formData.append('imageUrl', imageUrl);
-    formData.append('tags', tags.join(',')); // 后端使用字符串或数组自行处理
-    formData.append('uploader', user.id); // 添加上传者 ID（必须字段）
+    formData.append('tags', tags.join(','));
+    formData.append('uploader', user.id);
 
     try {
       const response = await axios.post('/seeds/upload', formData, {
@@ -63,7 +76,7 @@
         setMessage(response.data.msg || '上传失败，请稍后再试');
       }
     } catch (error) {
-      console.error(error);
+      console.error('[handleSubmit] 上传失败:', error);
       setMessage('上传失败，发生了错误');
     } finally {
       setIsLoading(false);
@@ -121,16 +134,17 @@
 
           <div className="seed-file">
             <label>种子文件</label>
-            <label className="seed-file-label">
+            <div className="seed-file-label" onClick={handleFileButtonClick}>
               点击选择文件
-              <input
-                type="file"
-                accept=".torrent"
-                onChange={handleFileChange}
-                style={{ display: 'none' }}
-              />
-            </label>
-            {file && <div style={{ marginTop: '5px' }}>{file.name}</div>}
+            </div>
+            <input
+              type="file"
+              accept=".torrent"
+              ref={fileInputRef}
+              onChange={handleFileChange}
+              style={{ display: 'none' }}
+            />
+            {fileName && <div style={{ marginTop: '5px' }}>{fileName}</div>}
           </div>
 
           <div className="form-group">
diff --git a/src/pages/PublishSeed/SimpleUploader.jsx b/src/pages/PublishSeed/SimpleUploader.jsx
new file mode 100644
index 0000000..0f44b6a
--- /dev/null
+++ b/src/pages/PublishSeed/SimpleUploader.jsx
@@ -0,0 +1,45 @@
+import React, { useRef, useState } from 'react';
+import axios from 'axios';
+
+const SimpleUploader = () => {
+  const fileInputRef = useRef(null);
+  const [message, setMessage] = useState('');
+
+  const handleUpload = async () => {
+    const file = fileInputRef.current?.files[0];
+    console.log('[handleUpload] file:', file);
+
+    if (!file) {
+      setMessage('请先选择文件');
+      return;
+    }
+
+    const formData = new FormData();
+    formData.append('file', file);
+
+    try {
+      const response = await axios.post('/seeds/upload', formData, {
+        headers: { 'Content-Type': 'multipart/form-data' },
+      });
+
+      console.log('[handleUpload] response:', response);
+      setMessage(response.data?.msg || '上传成功');
+    } catch (err) {
+      console.error('[handleUpload] 上传失败:', err);
+      setMessage('上传失败');
+    }
+  };
+
+  return (
+    <div style={{ padding: '2rem' }}>
+      <h2>种子上传测试</h2>
+      <input type="file" accept=".torrent" ref={fileInputRef} />
+      <button onClick={handleUpload} style={{ marginLeft: '1rem' }}>
+        上传
+      </button>
+      <div style={{ marginTop: '1rem' }}>{message}</div>
+    </div>
+  );
+};
+
+export default SimpleUploader;
