diff --git a/web/app/components/base/file-uploader/constants.ts b/web/app/components/base/file-uploader/constants.ts index eb56c42a78..f738121363 100644 --- a/web/app/components/base/file-uploader/constants.ts +++ b/web/app/components/base/file-uploader/constants.ts @@ -1 +1,2 @@ export const FILE_SIZE_LIMIT = 15 * 1024 * 1024 +export const FILE_URL_REGEX = /^(https?|ftp):\/\// diff --git a/web/app/components/base/file-uploader/file-from-link-or-local/index.tsx b/web/app/components/base/file-uploader/file-from-link-or-local/index.tsx index c3f0eaff90..1ff2bdd174 100644 --- a/web/app/components/base/file-uploader/file-from-link-or-local/index.tsx +++ b/web/app/components/base/file-uploader/file-from-link-or-local/index.tsx @@ -7,6 +7,7 @@ import { RiUploadCloud2Line } from '@remixicon/react' import FileInput from '../file-input' import { useFile } from '../hooks' import { useStore } from '../store' +import { FILE_URL_REGEX } from '../constants' import { PortalToFollowElem, PortalToFollowElemContent, @@ -14,6 +15,7 @@ import { } from '@/app/components/base/portal-to-follow-elem' import Button from '@/app/components/base/button' import type { FileUpload } from '@/app/components/base/features/types' +import cn from '@/utils/classnames' type FileFromLinkOrLocalProps = { showFromLink?: boolean @@ -31,9 +33,22 @@ const FileFromLinkOrLocal = ({ const files = useStore(s => s.files) const [open, setOpen] = useState(false) const [url, setUrl] = useState('') + const [showError, setShowError] = useState(false) const { handleLoadFileFromLink } = useFile(fileConfig) const disabled = !!fileConfig.number_limits && files.length >= fileConfig.number_limits + const handleSaveUrl = () => { + if (!url) + return + + if (!FILE_URL_REGEX.test(url)) { + setShowError(true) + return + } + handleLoadFileFromLink(url) + setUrl('') + } + return ( { showFromLink && ( -
- setUrl(e.target.value)} - disabled={disabled} - /> - -
+ <> +
+ { + setShowError(false) + setUrl(e.target.value) + }} + disabled={disabled} + /> + +
+ { + showError && ( +
+ {t('common.fileUploader.pasteFileLinkInvalid')} +
+ ) + } + ) } {