diff options
Diffstat (limited to 'components/ship-vendor-document/add-attachment-dialog.tsx')
| -rw-r--r-- | components/ship-vendor-document/add-attachment-dialog.tsx | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/components/ship-vendor-document/add-attachment-dialog.tsx b/components/ship-vendor-document/add-attachment-dialog.tsx index 1e9bfb51..8c5e17c8 100644 --- a/components/ship-vendor-document/add-attachment-dialog.tsx +++ b/components/ship-vendor-document/add-attachment-dialog.tsx @@ -147,6 +147,9 @@ function FileUploadArea({ <p className="text-xs text-gray-500"> Supports PDF, Word, Excel, Image, Text, ZIP, CAD files (DWG, DXF, STEP, STL, IGES) (max 1GB) </p> + <p className="text-xs text-orange-600 mt-1"> + Note: File names cannot contain these characters: < > : " ' | ? * + </p> <input ref={fileInputRef} type="file" @@ -285,7 +288,49 @@ export function AddAttachmentDialog({ } catch (error) { console.error('❌ Attachment upload error:', error) - toast.error(error instanceof Error ? error.message : "An error occurred while uploading attachments") + + let userMessage = "An error occurred while uploading attachments" + + if (error instanceof Error) { + const message = error.message.toLowerCase() + + // 파일명 관련 에러 (보안상 허용) + if (message.includes("안전하지 않은 파일명") || message.includes("unsafe filename") || + message.includes("filename") && message.includes("invalid")) { + userMessage = "File name contains invalid characters. Please avoid using < > : \" ' | ? * in file names. filename can't start with '..'." + } + // 파일명 길이 에러 (보안상 허용) + else if (message.includes("파일명이 너무 깁니다") || message.includes("filename too long") || + message.includes("파일명") && message.includes("길이")) { + userMessage = "File name is too long. Please use a shorter name (max 255 characters)." + } + // 파일 크기 에러 (보안상 허용) + else if (message.includes("파일 크기가 너무 큽니다") || message.includes("file size") || + message.includes("1gb limit") || message.includes("exceeds") && message.includes("limit")) { + userMessage = "File size is too large. Please use files smaller than 1GB." + } + // 클라이언트측 네트워크 에러 (기존과 같이 처리) + else if (message.includes("network") || message.includes("fetch") || + message.includes("connection") || message.includes("timeout")) { + userMessage = "Network error occurred. Please check your connection and try again." + } + // 서버측 오류는 보안상 일반적인 메시지로 처리 + else if (message.includes("500") || message.includes("server") || + message.includes("database") || message.includes("internal") || + message.includes("security") || message.includes("validation")) { + userMessage = "Please try again later. If the problem persists, please contact the administrator." + } + // 기타 알려진 클라이언트 에러는 원본 메시지 사용 (영어인 경우) + else if (!/[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/.test(error.message) && error.message.length < 200) { + userMessage = error.message + } + // 그 외는 일반적인 메시지 + else { + userMessage = "Please try again later. If the problem persists, please contact the administrator." + } + } + + toast.error(userMessage) } finally { setIsUploading(false) setTimeout(() => setUploadProgress(0), 2000) |
