### What problem does this PR solve? fix: Fixed the issue of error reporting when uploading files in the chat box #2897 ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue) - [ ] New Feature (non-breaking change which adds functionality) - [ ] Documentation Update - [ ] Refactoring - [ ] Performance Improvement - [ ] Other (please describe):tags/v0.13.0
| return ids; | return ids; | ||||
| }; | }; | ||||
| const isUploadError = (file: UploadFile) => { | |||||
| const retcode = get(file, 'response.retcode'); | |||||
| return typeof retcode === 'number' && retcode !== 0; | |||||
| }; | |||||
| const isUploadSuccess = (file: UploadFile) => { | const isUploadSuccess = (file: UploadFile) => { | ||||
| const retcode = get(file, 'response.retcode'); | const retcode = get(file, 'response.retcode'); | ||||
| return typeof retcode === 'number' && retcode === 0; | return typeof retcode === 'number' && retcode === 0; | ||||
| const creatingRet = await createConversationBeforeUploadDocument( | const creatingRet = await createConversationBeforeUploadDocument( | ||||
| file.name, | file.name, | ||||
| ); | ); | ||||
| if (creatingRet.retcode === 0) { | |||||
| if (creatingRet?.retcode === 0) { | |||||
| nextConversationId = creatingRet.data.id; | nextConversationId = creatingRet.data.id; | ||||
| } | } | ||||
| } | } | ||||
| }); | }); | ||||
| return [...list]; | return [...list]; | ||||
| }); | }); | ||||
| const ret = await uploadAndParseDocument({ | const ret = await uploadAndParseDocument({ | ||||
| conversationId: nextConversationId, | conversationId: nextConversationId, | ||||
| fileList: [file], | fileList: [file], | ||||
| <Space> | <Space> | ||||
| {showUploadIcon && ( | {showUploadIcon && ( | ||||
| <Upload | <Upload | ||||
| // action={uploadUrl} | |||||
| // fileList={fileList} | |||||
| onPreview={handlePreview} | onPreview={handlePreview} | ||||
| onChange={handleChange} | onChange={handleChange} | ||||
| multiple={false} | multiple={false} | ||||
| // headers={{ [Authorization]: getAuthorization() }} | |||||
| // data={{ conversation_id: conversationId }} | |||||
| // method="post" | |||||
| onRemove={handleRemove} | onRemove={handleRemove} | ||||
| showUploadList={false} | showUploadList={false} | ||||
| beforeUpload={(file, fileList) => { | |||||
| console.log('🚀 ~ beforeUpload:', fileList); | |||||
| beforeUpload={() => { | |||||
| return false; | return false; | ||||
| }} | }} | ||||
| > | > | ||||
| <List.Item> | <List.Item> | ||||
| <Card className={styles.documentCard}> | <Card className={styles.documentCard}> | ||||
| <Flex gap={10} align="center"> | <Flex gap={10} align="center"> | ||||
| {item.status === 'uploading' || !item.response ? ( | |||||
| {item.status === 'uploading' ? ( | |||||
| <Spin | <Spin | ||||
| indicator={ | indicator={ | ||||
| <LoadingOutlined style={{ fontSize: 24 }} spin /> | <LoadingOutlined style={{ fontSize: 24 }} spin /> | ||||
| } | } | ||||
| /> | /> | ||||
| ) : !getFileId(item) ? ( | |||||
| <InfoCircleOutlined | |||||
| size={30} | |||||
| // width={30} | |||||
| ></InfoCircleOutlined> | |||||
| ) : item.status === 'error' ? ( | |||||
| <InfoCircleOutlined size={30}></InfoCircleOutlined> | |||||
| ) : ( | ) : ( | ||||
| <FileIcon id={id} name={fileName}></FileIcon> | <FileIcon id={id} name={fileName}></FileIcon> | ||||
| )} | )} | ||||
| > | > | ||||
| <b> {fileName}</b> | <b> {fileName}</b> | ||||
| </Text> | </Text> | ||||
| {isUploadError(item) ? ( | |||||
| {item.status === 'error' ? ( | |||||
| t('uploadFailed') | t('uploadFailed') | ||||
| ) : ( | ) : ( | ||||
| <> | <> |
| conversationId: string; | conversationId: string; | ||||
| fileList: UploadFile[]; | fileList: UploadFile[]; | ||||
| }) => { | }) => { | ||||
| const formData = new FormData(); | |||||
| formData.append('conversation_id', conversationId); | |||||
| fileList.forEach((file: UploadFile) => { | |||||
| formData.append('file', file as any); | |||||
| }); | |||||
| if (uploadMethod === 'upload_and_parse') { | |||||
| const data = await kbService.upload_and_parse(formData); | |||||
| try { | |||||
| const formData = new FormData(); | |||||
| formData.append('conversation_id', conversationId); | |||||
| fileList.forEach((file: UploadFile) => { | |||||
| formData.append('file', file as any); | |||||
| }); | |||||
| if (uploadMethod === 'upload_and_parse') { | |||||
| const data = await kbService.upload_and_parse(formData); | |||||
| return data?.data; | |||||
| } | |||||
| const data = await chatService.uploadAndParseExternal(formData); | |||||
| return data?.data; | return data?.data; | ||||
| } catch (error) { | |||||
| console.log('🚀 ~ useUploadAndParseDocument ~ error:', error); | |||||
| } | } | ||||
| const data = await chatService.uploadAndParseExternal(formData); | |||||
| return data?.data; | |||||
| }, | }, | ||||
| }); | }); | ||||
| export const useCreateConversationBeforeUploadDocument = () => { | export const useCreateConversationBeforeUploadDocument = () => { | ||||
| const { setConversation } = useSetConversation(); | const { setConversation } = useSetConversation(); | ||||
| const { dialogId } = useGetChatSearchParams(); | const { dialogId } = useGetChatSearchParams(); | ||||
| const { getConversationIsNew } = useSetChatRouteParams(); | |||||
| const createConversationBeforeUploadDocument = useCallback( | const createConversationBeforeUploadDocument = useCallback( | ||||
| async (message: string) => { | async (message: string) => { | ||||
| const data = await setConversation(message, true); | |||||
| const isNew = getConversationIsNew(); | |||||
| if (isNew === 'true') { | |||||
| const data = await setConversation(message, true); | |||||
| return data; | |||||
| return data; | |||||
| } | |||||
| }, | }, | ||||
| [setConversation], | |||||
| [setConversation, getConversationIsNew], | |||||
| ); | ); | ||||
| return { | return { |
| } | } | ||||
| } | } | ||||
| } | } | ||||
| .fileThumbnail { | |||||
| display: inline-block; | |||||
| max-width: 40px; | |||||
| } |
| {documentId && ( | {documentId && ( | ||||
| <Flex gap={'small'}> | <Flex gap={'small'}> | ||||
| {fileThumbnail ? ( | {fileThumbnail ? ( | ||||
| <img src={fileThumbnail} alt="" /> | |||||
| <img | |||||
| src={fileThumbnail} | |||||
| alt="" | |||||
| className={styles.fileThumbnail} | |||||
| /> | |||||
| ) : ( | ) : ( | ||||
| <SvgIcon | <SvgIcon | ||||
| name={`file-icon/${fileExtension}`} | name={`file-icon/${fileExtension}`} |
| import api from '@/utils/api'; | import api from '@/utils/api'; | ||||
| import registerServer from '@/utils/register-server'; | import registerServer from '@/utils/register-server'; | ||||
| import request from '@/utils/request'; | import request from '@/utils/request'; | ||||
| import pureRequest from 'umi-request'; | |||||
| const { | const { | ||||
| create_kb, | create_kb, | ||||
| retrieval_test, | retrieval_test, | ||||
| document_rename, | document_rename, | ||||
| document_run, | document_run, | ||||
| get_document_file, | |||||
| document_upload, | document_upload, | ||||
| web_crawl, | web_crawl, | ||||
| knowledge_graph, | knowledge_graph, | ||||
| const kbService = registerServer<keyof typeof methods>(methods, request); | const kbService = registerServer<keyof typeof methods>(methods, request); | ||||
| export const getDocumentFile = (documentId: string) => { | |||||
| return pureRequest(get_document_file + '/' + documentId, { | |||||
| responseType: 'blob', | |||||
| method: 'get', | |||||
| parseResponse: false, | |||||
| // getResponse: true, | |||||
| }) | |||||
| .then((res) => { | |||||
| const x = res.headers.get('content-disposition'); | |||||
| console.info(res); | |||||
| console.info(x); | |||||
| return res.blob(); | |||||
| }) | |||||
| .then((res) => { | |||||
| // const objectURL = URL.createObjectURL(res); | |||||
| // let btn = document.createElement('a'); | |||||
| // btn.download = '文件名.pdf'; | |||||
| // btn.href = objectURL; | |||||
| // btn.click(); | |||||
| // URL.revokeObjectURL(objectURL); | |||||
| // btn = null; | |||||
| return res; | |||||
| }) | |||||
| .catch((err) => { | |||||
| console.info(err); | |||||
| }); | |||||
| }; | |||||
| export default kbService; | export default kbService; |