Преглед на файлове

模型,严谨,上传

S0025136190 преди 7 месеца
родител
ревизия
b0d21b17b1
променени са 2 файла, в които са добавени 80 реда и са изтрити 33 реда
  1. 78 32
      src/pages/takai/knowledgeLib/detail/index.tsx
  2. 2 1
      src/pages/takai/questionAnswer/info/index.tsx

+ 78 - 32
src/pages/takai/knowledgeLib/detail/index.tsx

@@ -12,6 +12,7 @@ import router from '@/router';
 import { Record, RecordKonwledge } from './types';
 import dayjs from 'dayjs';
 import { set } from 'mobx';
+import axios from 'axios';
 
 const { Dragger } = Upload;
 
@@ -47,50 +48,93 @@ const KnowledgeLibInfo: React.FC = () => {
 
     const params = useParams();
 
+    const [fileList, setFileList] = React.useState<any[]>([]);
+    const [uploading, setUploading] = React.useState(false);
+
     const props: UploadProps = {
         name: 'file',
         multiple: true,
-        action: '/api/deepseek/api/uploadDocument/' + params.knowledgeId,
+        accept: '.md,.txt,.pdf,.jpg,.png,.jpeg,.docx,.xlsx,.pptx,.eml,.csv,.tar,.gz,.bz2,.zip,.rar,.jar',
+        fileList: fileList,
+        //action: '/api/deepseek/api/uploadDocument/' + params.knowledgeId,
 
-        beforeUpload(file, fileList) {
-            setUploadLoading(true);
-            // 自定义上传逻辑
-            if (fileList.length > 1) {
-                setUploadLoading(false);
-                message.error('一次只能上传一个文件');
-                return false;
-            }
-            if (file.name.split('.').pop() !== 'pdf') {
-                setUploadLoading(false);
-                message.error('仅支持上传pdf文档');
-                return false;
-            }
-        },
-        onChange(info) {
-            const { status } = info.file;
+        beforeUpload: (file, files) => {
+            const allowedExtensions = ['md', 'txt', 'pdf', 'jpg', 'png', 'jpeg', 'docx', 'xlsx', 'pptx', 'eml', 'csv', 'tar', 'gz', 'bz2', 'zip', 'rar', 'jar'];
 
-            if (status !== 'uploading') {
-                console.log(status, 'status--uploading');
+            // 检查文件类型
+            for (const file of files) {
+                const fileExt = file.name.split('.').pop()?.toLowerCase();
+                if (!fileExt || !allowedExtensions.includes(fileExt)) {
+                    message.error(`不支持 ${fileExt} 格式的文件上传`);
+                    return Upload.LIST_IGNORE;
+                }
             }
-            if (status === 'done') {
-                console.log(status, 'status--done');
-                console.info(info.file.response, 'info.file.response.data');
-                if (info.file.response.code === 200 && info.file.response.data === 1) {
-                    message.success(`${info.file.name} file uploaded successfully.`);
-                    init(params.knowledgeId);
+
+            // 检查文件大小
+            let totalSize = 0;
+            for (const file of files) {
+                const fileExt = file.name.split('.').pop()?.toLowerCase();
+                const fileSizeMB = file.size / 1024 / 1024;
+
+                if (fileSizeMB > 30) {
+                    message.error('单个文件不能大于30M');
+                    return Upload.LIST_IGNORE;
+                }
+
+                if (['jpg', 'png', 'jpeg'].includes(fileExt!) && fileSizeMB > 5) {
+                    message.error('单张图片不能大于5M');
+                    return Upload.LIST_IGNORE;
                 }
-                setUploadLoading(false);
-            } else if (status === 'error') {
-                console.log(status, 'status--error');
-                message.error(`${info.file.name} file upload failed.`);
-                setUploadLoading(false);
+
+                totalSize += fileSizeMB;
+            }
+
+            if (totalSize > 125) {
+                message.error('文件总大小超过125M');
+                return Upload.LIST_IGNORE;
             }
+
+            return false;
+        },
+
+        onChange: async ({ fileList }) => {
+            setFileList(fileList);
+        },
+        onRemove: (file) => {
+            setFileList(prev => prev.filter(item => item.uid !== file.uid));
         },
         onDrop(e) {
             console.log('Dropped files', e.dataTransfer.files);
         },
     };
 
+    const handleUpload = async () => {
+        if (fileList.length === 0) return;
+
+        setUploading(true);
+        const formData = new FormData();
+
+        // 添加所有文件
+        fileList.forEach(file => {
+            if (file.originFileObj) {
+                formData.append('files', file.originFileObj);
+            }
+        });
+
+        try {
+            const res = await axios.post('/api/deepseek/api/uploadDocument/' + params.knowledgeId, formData, {
+                headers: { 'Content-Type': 'multipart/form-data' }
+            });
+
+            message.success(`${fileList.length}个文件上传成功`);
+            setFileList([]);
+        } catch (err) {
+            message.error('上传失败');
+        } finally {
+            setUploading(false);
+        }
+    };
+
     React.useEffect(() => {
         init(params.knowledgeId);
         return () => reset();
@@ -249,7 +293,9 @@ const KnowledgeLibInfo: React.FC = () => {
                                         点击上传,或拖放文件到此处
                                     </p >
                                     <p className="ant-upload-hint">
-                                        仅支持上传pdf文档,文档大小不超过50M.
+                                        支持文件格式md,txt,pdf,jpg,png,jpeg,docx,xlsx,
+                                        pptx,eml,csv,单个文档小雨30M,单张图片小于5M,文件总
+                                        大小不得超过125M.
                                     </p>
                                 </Dragger>
                             </div>
@@ -261,7 +307,7 @@ const KnowledgeLibInfo: React.FC = () => {
                     <>
                         <div>
                             <Upload {...props}>
-                                <Button type='primary' icon={<PlusOutlined />}>上传知识文件</Button>
+                                <Button type='primary' icon={<PlusOutlined />} onClick={handleUpload} disabled={uploading}>上传知识文件</Button>
                             </Upload>
                         </div>
 

+ 2 - 1
src/pages/takai/questionAnswer/info/index.tsx

@@ -311,7 +311,7 @@ const QuestionAnswerInfo: React.FC = () => {
         setIsVisibleCus(false);
         if (value === 'strict') {
             setTopPValue(0.5);
-            setTempValue(0.10);
+            setTempValue(0.01);
         } else if (value === 'moderate') {
             setTopPValue(0.7);
             setTempValue(0.50);
@@ -550,6 +550,7 @@ const QuestionAnswerInfo: React.FC = () => {
                                                     style={{ width: '300px', height: '48px' }}
                                                 >
                                                     <Option value='DeepSeek-R1-Distill-Llama-70B'>DeepSeek-R1-Distill-Llama-70B</Option>
+                                                    <Option value='Qwen2-72B'>Qwen2-72B</Option>
                                                     {/* {
                                                         modelList.map((item, index) => {
                                                             return <Option value={item.value} key={index}>