|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- import mime from 'mime'
- import { FileAppearanceTypeEnum } from './types'
- import type { FileEntity } from './types'
- import { upload } from '@/service/base'
- import { FILE_EXTS } from '@/app/components/base/prompt-editor/constants'
- import { SupportUploadFileTypes } from '@/app/components/workflow/types'
-
- type FileUploadParams = {
- file: File
- onProgressCallback: (progress: number) => void
- onSuccessCallback: (res: { id: string }) => void
- onErrorCallback: () => void
- }
- type FileUpload = (v: FileUploadParams, isPublic?: boolean, url?: string) => void
- export const fileUpload: FileUpload = ({
- file,
- onProgressCallback,
- onSuccessCallback,
- onErrorCallback,
- }, isPublic, url) => {
- const formData = new FormData()
- formData.append('file', file)
- const onProgress = (e: ProgressEvent) => {
- if (e.lengthComputable) {
- const percent = Math.floor(e.loaded / e.total * 100)
- onProgressCallback(percent)
- }
- }
-
- upload({
- xhr: new XMLHttpRequest(),
- data: formData,
- onprogress: onProgress,
- }, isPublic, url)
- .then((res: { id: string }) => {
- onSuccessCallback(res)
- })
- .catch(() => {
- onErrorCallback()
- })
- }
-
- export const getFileExtension = (fileName: string, fileMimetype: string) => {
- if (fileMimetype)
- return mime.getExtension(fileMimetype) || ''
-
- if (fileName) {
- const fileNamePair = fileName.split('.')
- const fileNamePairLength = fileNamePair.length
-
- if (fileNamePairLength > 1)
- return fileNamePair[fileNamePairLength - 1]
- }
-
- return ''
- }
-
- export const getFileAppearanceType = (fileName: string, fileMimetype: string) => {
- const extension = getFileExtension(fileName, fileMimetype)
-
- if (extension === 'gif')
- return FileAppearanceTypeEnum.gif
-
- if (FILE_EXTS.image.includes(extension.toUpperCase()))
- return FileAppearanceTypeEnum.image
-
- if (FILE_EXTS.video.includes(extension.toUpperCase()))
- return FileAppearanceTypeEnum.video
-
- if (FILE_EXTS.audio.includes(extension.toUpperCase()))
- return FileAppearanceTypeEnum.audio
-
- if (extension === 'html')
- return FileAppearanceTypeEnum.code
-
- if (extension === 'pdf')
- return FileAppearanceTypeEnum.pdf
-
- if (extension === 'md' || extension === 'markdown')
- return FileAppearanceTypeEnum.markdown
-
- if (extension === 'xlsx' || extension === 'xls')
- return FileAppearanceTypeEnum.excel
-
- if (extension === 'docx' || extension === 'doc')
- return FileAppearanceTypeEnum.word
-
- if (extension === 'pptx' || extension === 'ppt')
- return FileAppearanceTypeEnum.ppt
-
- if (FILE_EXTS.document.includes(extension.toUpperCase()))
- return FileAppearanceTypeEnum.document
-
- return FileAppearanceTypeEnum.custom
- }
-
- export const getSupportFileType = (fileName: string, fileMimetype: string, isCustom?: boolean) => {
- if (isCustom)
- return SupportUploadFileTypes.custom
-
- const extension = getFileExtension(fileName, fileMimetype)
- for (const key in FILE_EXTS) {
- if ((FILE_EXTS[key]).includes(extension.toUpperCase()))
- return key
- }
-
- return ''
- }
-
- export const getProcessedFiles = (files: FileEntity[]) => {
- return files.filter(file => file.progress !== -1).map(fileItem => ({
- type: fileItem.supportFileType,
- transfer_method: fileItem.transferMethod,
- url: fileItem.url || '',
- upload_file_id: fileItem.uploadedId || '',
- }))
- }
-
- export const getFileNameFromUrl = (url: string) => {
- const urlParts = url.split('/')
- return urlParts[urlParts.length - 1] || ''
- }
-
- export const getSupportFileExtensionList = (allowFileTypes: string[], allowFileExtensions: string[]) => {
- if (allowFileTypes.includes(SupportUploadFileTypes.custom))
- return allowFileExtensions
-
- return allowFileTypes.map(type => FILE_EXTS[type]).flat()
- }
-
- export const isAllowedFileExtension = (fileName: string, fileMimetype: string, allowFileTypes: string[], allowFileExtensions: string[]) => {
- return getSupportFileExtensionList(allowFileTypes, allowFileExtensions).includes(getFileExtension(fileName, fileMimetype).toUpperCase())
- }
|