import React, { useState } from 'react'; import { Button, message } from 'antd'; import { CopyOutlined } from '@ant-design/icons'; import {env} from '../../../env' interface ShareCodeGeneratorProps { fileId: string; onSuccess?: (code: string) => void; fileName?: string; } export const ShareCodeGenerator: React.FC = ({ fileId, onSuccess, fileName, }) => { const [loading, setLoading] = useState(false); const [shareCode, setShareCode] = useState(''); const [expiresAt, setExpiresAt] = useState(null); const generateCode = async () => { setLoading(true); console.log('开始生成分享码,fileId:', fileId, 'fileName:', fileName); try { const response = await fetch(`http://${env.SERVER_IP}:${env.SERVER_PORT}/upload/share/${fileId}`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ fileId }) }); console.log('Current fileId:', fileId); // 确保 fileId 有效 console.log('请求URL:', `http://${env.SERVER_IP}:${env.SERVER_PORT}/upload/share/${fileId}`); console.log('API响应状态:', response.status); const responseText = await response.text(); console.log('API原始响应:', responseText); if (!response.ok) { throw new Error(`请求失败: ${response.status} ${responseText || '无错误信息'}`); } // 确保响应不为空 if (!responseText) { throw new Error('服务器返回空响应'); } // 尝试解析JSON let data; try { data = JSON.parse(responseText); } catch (e) { console.error('解析响应JSON失败:', e); throw new Error('服务器响应格式错误'); } console.log('解析后的响应数据:', data); // 调试日志 if (!data.code) { throw new Error('响应中没有分享码'); } setShareCode(data.code); setExpiresAt(data.expiresAt ? new Date(data.expiresAt) : null); onSuccess?.(data.code); message.success('分享码生成成功'); } catch (error) { console.error('生成分享码错误:', error); message.error('生成分享码失败: ' + (error instanceof Error ? error.message : '未知错误')); } finally { setLoading(false); } }; return (
{/* 添加调试信息 */} 文件ID: {fileId}
{!shareCode ? ( ) : (
{shareCode}
{expiresAt ? (
有效期至: {expiresAt.toLocaleString()}
) : (
未获取到有效期信息
)}
)}
); };