|
|
|
@@ -25,7 +25,7 @@ import { TransferMethod } from '@/types/app' |
|
|
|
import { SupportUploadFileTypes } from '@/app/components/workflow/types' |
|
|
|
import type { FileUpload } from '@/app/components/base/features/types' |
|
|
|
import { formatFileSize } from '@/utils/format' |
|
|
|
import { fetchRemoteFileInfo } from '@/service/common' |
|
|
|
import { uploadRemoteFileInfo } from '@/service/common' |
|
|
|
import type { FileUploadConfigResponse } from '@/models/common' |
|
|
|
|
|
|
|
export const useFileSizeLimit = (fileUploadConfig?: FileUploadConfigResponse) => { |
|
|
|
@@ -49,7 +49,7 @@ export const useFile = (fileConfig: FileUpload) => { |
|
|
|
const params = useParams() |
|
|
|
const { imgSizeLimit, docSizeLimit, audioSizeLimit, videoSizeLimit } = useFileSizeLimit(fileConfig.fileUploadConfig) |
|
|
|
|
|
|
|
const checkSizeLimit = (fileType: string, fileSize: number) => { |
|
|
|
const checkSizeLimit = useCallback((fileType: string, fileSize: number) => { |
|
|
|
switch (fileType) { |
|
|
|
case SupportUploadFileTypes.image: { |
|
|
|
if (fileSize > imgSizeLimit) { |
|
|
|
@@ -120,7 +120,7 @@ export const useFile = (fileConfig: FileUpload) => { |
|
|
|
return true |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}, [audioSizeLimit, docSizeLimit, imgSizeLimit, notify, t, videoSizeLimit]) |
|
|
|
|
|
|
|
const handleAddFile = useCallback((newFile: FileEntity) => { |
|
|
|
const { |
|
|
|
@@ -188,6 +188,17 @@ export const useFile = (fileConfig: FileUpload) => { |
|
|
|
} |
|
|
|
}, [fileStore, notify, t, handleUpdateFile, params]) |
|
|
|
|
|
|
|
const startProgressTimer = useCallback((fileId: string) => { |
|
|
|
const timer = setInterval(() => { |
|
|
|
const files = fileStore.getState().files |
|
|
|
const file = files.find(file => file.id === fileId) |
|
|
|
|
|
|
|
if (file && file.progress < 80 && file.progress >= 0) |
|
|
|
handleUpdateFile({ ...file, progress: file.progress + 20 }) |
|
|
|
else |
|
|
|
clearTimeout(timer) |
|
|
|
}, 200) |
|
|
|
}, [fileStore, handleUpdateFile]) |
|
|
|
const handleLoadFileFromLink = useCallback((url: string) => { |
|
|
|
const allowedFileTypes = fileConfig.allowed_file_types |
|
|
|
|
|
|
|
@@ -197,19 +208,27 @@ export const useFile = (fileConfig: FileUpload) => { |
|
|
|
type: '', |
|
|
|
size: 0, |
|
|
|
progress: 0, |
|
|
|
transferMethod: TransferMethod.remote_url, |
|
|
|
transferMethod: TransferMethod.local_file, |
|
|
|
supportFileType: '', |
|
|
|
url, |
|
|
|
isRemote: true, |
|
|
|
} |
|
|
|
handleAddFile(uploadingFile) |
|
|
|
startProgressTimer(uploadingFile.id) |
|
|
|
|
|
|
|
fetchRemoteFileInfo(url).then((res) => { |
|
|
|
uploadRemoteFileInfo(url).then((res) => { |
|
|
|
const newFile = { |
|
|
|
...uploadingFile, |
|
|
|
type: res.file_type, |
|
|
|
size: res.file_length, |
|
|
|
type: res.mime_type, |
|
|
|
size: res.size, |
|
|
|
progress: 100, |
|
|
|
supportFileType: getSupportFileType(url, res.file_type, allowedFileTypes?.includes(SupportUploadFileTypes.custom)), |
|
|
|
supportFileType: getSupportFileType(res.name, res.mime_type, allowedFileTypes?.includes(SupportUploadFileTypes.custom)), |
|
|
|
uploadedId: res.id, |
|
|
|
url: res.url, |
|
|
|
} |
|
|
|
if (!isAllowedFileExtension(res.name, res.mime_type, fileConfig.allowed_file_types || [], fileConfig.allowed_file_extensions || [])) { |
|
|
|
notify({ type: 'error', message: t('common.fileUploader.fileExtensionNotSupport') }) |
|
|
|
handleRemoveFile(uploadingFile.id) |
|
|
|
} |
|
|
|
if (!checkSizeLimit(newFile.supportFileType, newFile.size)) |
|
|
|
handleRemoveFile(uploadingFile.id) |
|
|
|
@@ -219,7 +238,7 @@ export const useFile = (fileConfig: FileUpload) => { |
|
|
|
notify({ type: 'error', message: t('common.fileUploader.pasteFileLinkInvalid') }) |
|
|
|
handleRemoveFile(uploadingFile.id) |
|
|
|
}) |
|
|
|
}, [checkSizeLimit, handleAddFile, handleUpdateFile, notify, t, handleRemoveFile, fileConfig?.allowed_file_types]) |
|
|
|
}, [checkSizeLimit, handleAddFile, handleUpdateFile, notify, t, handleRemoveFile, fileConfig?.allowed_file_types, fileConfig.allowed_file_extensions, startProgressTimer]) |
|
|
|
|
|
|
|
const handleLoadFileFromLinkSuccess = useCallback(() => { }, []) |
|
|
|
|