调试种子列表、下载种子
Change-Id: Iaf8fc868ae0f26af06e7e1e0ef4af436cd4f959d
diff --git a/src/pages/PublishSeed/PublishSeed.jsx b/src/pages/PublishSeed/PublishSeed.jsx
index f27ebc2..7287e82 100644
--- a/src/pages/PublishSeed/PublishSeed.jsx
+++ b/src/pages/PublishSeed/PublishSeed.jsx
@@ -1,54 +1,81 @@
-import React, { useState, useRef } from 'react';
+// export default PublishSeed;
+import React, { useState, useRef, useEffect } from 'react';
import axios from 'axios';
import Header from '../../components/Header';
import './PublishSeed.css';
import { useUser } from '../../context/UserContext';
const PublishSeed = () => {
+ console.log('[DEBUG] PublishSeed 组件渲染');
+
const [title, setTitle] = useState('');
const [description, setDescription] = useState('');
const [tags, setTags] = useState([]);
const [category, setCategory] = useState('movie');
- const [imageUrl, setImageUrl] = useState('');
const [message, setMessage] = useState('');
const [isLoading, setIsLoading] = useState(false);
const [fileName, setFileName] = useState('');
+ const [imageFile, setImageFile] = useState(null);
+ const [previewUrl, setPreviewUrl] = useState('');
- const fileInputRef = useRef(null); // ✅ 获取 input file 引用
+ const fileInputRef = useRef(null);
+ const imageInputRef = useRef(null);
const { user } = useUser();
+ useEffect(() => {
+ console.log('[DEBUG] 当前用户:', user);
+ }, [user]);
+
const handleTagsChange = (e) => {
- setTags(e.target.value.split(',').map(tag => tag.trim()));
+ console.log('[DEBUG] 标签输入变化:', e.target.value);
+ setTags(e.target.value.split(',').map(tag => tag.trim()).filter(Boolean));
};
const handleFileButtonClick = () => {
- fileInputRef.current?.click(); // 点击隐藏的 input
+ console.log('[DEBUG] 触发文件选择按钮点击');
+ fileInputRef.current?.click();
+ };
+
+ const handleImageButtonClick = () => {
+ console.log('[DEBUG] 触发封面图片选择按钮点击');
+ imageInputRef.current?.click();
};
const handleFileChange = (e) => {
+ console.log('[DEBUG] 种子文件选择变化:', e.target.files);
const selectedFile = e.target.files[0];
if (selectedFile) {
- setFileName(selectedFile.name); // 仅展示文件名
+ setFileName(selectedFile.name);
}
};
- const handleSubmit = async (e) => {
- e.preventDefault();
- console.log('[handleSubmit] 表单提交开始');
+ const handleImageChange = (e) => {
+ console.log('[DEBUG] 封面图片选择变化:', e.target.files);
+ const img = e.target.files[0];
+ if (!img) return;
+ setImageFile(img);
+ setPreviewUrl(URL.createObjectURL(img));
+ };
- const currentFile = fileInputRef.current?.files[0]; // ✅ 获取文件
- console.log('[handleSubmit] currentFile:', currentFile);
+ const handleSubmit = async (e) => {
+ console.log('[DEBUG] handleSubmit 被触发', e);
+ e.preventDefault();
setIsLoading(true);
setMessage('');
- if (!user || !user.id) {
+ const currentFile = fileInputRef.current?.files[0];
+ console.log('[DEBUG] 当前选择文件:', currentFile);
+
+ if (!user || !user.userId) {
+ console.log('[DEBUG] 用户未登录,阻止上传');
setMessage('请先登录');
setIsLoading(false);
return;
}
if (!currentFile || !currentFile.name.toLowerCase().endsWith('.torrent')) {
+ console.log('[DEBUG] 文件校验失败');
setMessage('请上传一个 .torrent 文件');
setIsLoading(false);
return;
@@ -59,21 +86,25 @@
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);
+ formData.append('tags', tags.join(',')); // 逗号分隔字符串
+ formData.append('uploader', user.userId);
+
+ if (imageFile) {
+ formData.append('image_url', imageFile);
+ }
try {
+ console.log('[DEBUG] 发送上传请求...');
const response = await axios.post('/seeds/upload', formData, {
- headers: {
- 'Content-Type': 'multipart/form-data',
- },
+ // axios 会自动处理 multipart/form-data Content-Type 边界,不用手动设置
+ // headers: { 'Content-Type': 'multipart/form-data' },
});
+ console.log('[DEBUG] 请求成功,响应:', response.data);
- if (response.data.code === 0) {
+ if (response.data.status === 'success') {
setMessage('种子上传成功');
} else {
- setMessage(response.data.msg || '上传失败,请稍后再试');
+ setMessage(response.data.message || '上传失败,请稍后再试');
}
} catch (error) {
console.error('[handleSubmit] 上传失败:', error);
@@ -88,13 +119,22 @@
<Header />
<div className="pub-card">
{message && <div className="message">{message}</div>}
- <form onSubmit={handleSubmit} encType="multipart/form-data">
+ <form
+ onSubmit={(e) => {
+ console.log('[DEBUG] form onSubmit 触发');
+ handleSubmit(e);
+ }}
+ encType="multipart/form-data"
+ >
<div className="title-tag">
<label>标题</label>
<input
type="text"
value={title}
- onChange={(e) => setTitle(e.target.value)}
+ onChange={(e) => {
+ console.log('[DEBUG] 标题输入变化:', e.target.value);
+ setTitle(e.target.value);
+ }}
required
/>
</div>
@@ -103,7 +143,10 @@
<label>描述</label>
<textarea
value={description}
- onChange={(e) => setDescription(e.target.value)}
+ onChange={(e) => {
+ console.log('[DEBUG] 描述输入变化:', e.target.value);
+ setDescription(e.target.value);
+ }}
required
/>
</div>
@@ -123,7 +166,10 @@
<label>分类</label>
<select
value={category}
- onChange={(e) => setCategory(e.target.value)}
+ onChange={(e) => {
+ console.log('[DEBUG] 分类选择变化:', e.target.value);
+ setCategory(e.target.value);
+ }}
required
>
<option value="movie">电影</option>
@@ -134,7 +180,11 @@
<div className="seed-file">
<label>种子文件</label>
- <div className="seed-file-label" onClick={handleFileButtonClick}>
+ <div
+ className="seed-file-label"
+ onClick={handleFileButtonClick}
+ style={{ cursor: 'pointer' }}
+ >
点击选择文件
</div>
<input
@@ -148,28 +198,36 @@
</div>
<div className="form-group">
- <label>封面图URL</label>
- <input
- type="url"
- value={imageUrl}
- onChange={(e) => setImageUrl(e.target.value)}
- placeholder="例如:http://example.com/images/cover.jpg"
- required
- style={{
- padding: '1%',
- width: '100%',
- borderRadius: '6px',
- border: '1px solid #e0c4a1',
- backgroundColor: '#fff5f5',
- color: '#5F4437',
- fontSize: '1rem',
- marginBottom: '2%',
- }}
- />
+ <label>封面图</label>
+ <div className="cover-upload">
+ <button type="button" onClick={handleImageButtonClick}>
+ 上传图片
+ </button>
+ <input
+ type="file"
+ accept="image/*"
+ ref={imageInputRef}
+ onChange={handleImageChange}
+ style={{ display: 'none' }}
+ />
+ </div>
+ {previewUrl && (
+ <div style={{ marginTop: '10px' }}>
+ <img
+ src={previewUrl}
+ alt="封面预览"
+ style={{ maxWidth: '100%', maxHeight: '200px' }}
+ />
+ </div>
+ )}
</div>
<div className="upload-button">
- <button type="submit" disabled={isLoading}>
+ <button
+ type="submit"
+ disabled={isLoading}
+ onClick={() => console.log('[DEBUG] 上传按钮 onClick 触发')}
+ >
{isLoading ? '正在上传...' : '上传种子'}
</button>
</div>