diff --git a/web/src/api/fileStorage.ts b/web/src/api/fileStorage.ts index e5ed9ff8..ce133565 100644 --- a/web/src/api/fileStorage.ts +++ b/web/src/api/fileStorage.ts @@ -1,15 +1,16 @@ /* * @Author: ZhaoYing * @Date: 2026-02-03 13:59:56 - * @Last Modified by: ZhaoYing - * @Last Modified time: 2026-02-03 13:59:56 + * @Last Modified by: ZhaoYing + * @Last Modified time: 2026-02-09 16:24:05 */ import { request, API_PREFIX } from '@/utils/request' // Upload file,file storage has expiration period -export const fileUploadUrl = `${API_PREFIX}/storage/files` +export const fileUploadUrlWithoutApiPrefix = '/storage/files' +export const fileUploadUrl = `${API_PREFIX}${fileUploadUrlWithoutApiPrefix}` export const fileUpload = (formData?: unknown) => { - return request.uploadFile('/storage/files', formData) + return request.uploadFile(fileUploadUrlWithoutApiPrefix, formData) } // Get file access URL (no token required) @@ -30,4 +31,5 @@ export const deleteFile = (fileId: string) => { return request.delete(deleteFileUrl(fileId)) } -export const shareFileUploadUrl = `${API_PREFIX}/storage/share/files` \ No newline at end of file +export const shareFileUploadUrlWithoutApiPrefix = `/storage/share/files` +export const shareFileUploadUrl = `${API_PREFIX}${shareFileUploadUrlWithoutApiPrefix}` \ No newline at end of file diff --git a/web/src/views/Conversation/components/FileUpload.tsx b/web/src/views/Conversation/components/FileUpload.tsx index f7620f3b..b7d65f80 100644 --- a/web/src/views/Conversation/components/FileUpload.tsx +++ b/web/src/views/Conversation/components/FileUpload.tsx @@ -1,8 +1,8 @@ /* * @Author: ZhaoYing * @Date: 2026-02-06 21:09:42 - * @Last Modified by: ZhaoYing - * @Last Modified time: 2026-02-06 21:09:42 + * @Last Modified by: ZhaoYing + * @Last Modified time: 2026-02-09 16:41:31 */ /** * File Upload Component @@ -25,8 +25,8 @@ import { Upload, Progress, App } from 'antd'; import type { UploadProps, UploadFile } from 'antd'; import type { UploadProps as RcUploadProps } from 'antd/es/upload/interface'; import { useTranslation } from 'react-i18next'; -import { cookieUtils } from '@/utils/request' -import { fileUploadUrl } from '@/api/fileStorage' +import { request } from '@/utils/request' +import { fileUploadUrlWithoutApiPrefix } from '@/api/fileStorage' interface UploadFilesProps extends Omit { /** Upload API endpoint */ @@ -99,7 +99,7 @@ export interface UploadFilesRef { * Supports single/multiple file uploads, drag-and-drop, file validation, and preview */ const UploadFiles = forwardRef(({ - action = fileUploadUrl, + action = fileUploadUrlWithoutApiPrefix, multiple = false, fileList: propFileList = [], onChange, @@ -110,6 +110,7 @@ const UploadFiles = forwardRef(({ maxCount = 1, onRemove: customOnRemove, update, + requestConfig, ...props }, ref) => { const { t } = useTranslation(); @@ -163,6 +164,24 @@ const UploadFiles = forwardRef(({ return isAutoUpload; }; + /** + * Custom upload request handler + */ + const handleCustomRequest: RcUploadProps['customRequest'] = async (options) => { + const { file, onSuccess, onError } = options; + + try { + const formData = new FormData(); + formData.append('file', file); + + const response = await request.uploadFile(action, formData, requestConfig); + + onSuccess?.({data: response}); + } catch (error) { + onError?.(error as Error); + } + }; + /** * Handles upload state changes */ @@ -207,13 +226,10 @@ const UploadFiles = forwardRef(({ // Generate upload component configuration const uploadProps: UploadProps = { - action, + customRequest: handleCustomRequest, multiple: multiple && maxCount > 1, fileList, beforeUpload, - headers: { - authorization: `Bearer ${cookieUtils.get('authToken')}`, - }, onChange: handleChange, accept, disabled, diff --git a/web/src/views/Conversation/index.tsx b/web/src/views/Conversation/index.tsx index d2aa1922..89043a20 100644 --- a/web/src/views/Conversation/index.tsx +++ b/web/src/views/Conversation/index.tsx @@ -2,7 +2,7 @@ * @Author: ZhaoYing * @Date: 2026-02-03 16:58:03 * @Last Modified by: ZhaoYing - * @Last Modified time: 2026-02-06 21:11:23 + * @Last Modified time: 2026-02-09 16:37:49 */ /** * Conversation Page @@ -35,7 +35,7 @@ import MemoryFunctionCheckedIcon from '@/assets/images/conversation/memoryFuncti import { type SSEMessage } from '@/utils/stream' import UploadFiles from './components/FileUpload' // import AudioRecorder from '@/components/AudioRecorder' -import { shareFileUploadUrl } from '@/api/fileStorage' +import { shareFileUploadUrlWithoutApiPrefix } from '@/api/fileStorage' import UploadFileListModal from './components/UploadFileListModal' /** @@ -350,11 +350,16 @@ const Conversation: FC = () => { { key: 'upload', label: ( ) },