fix: add null checks in FileUploader to prevent split() on undefined

- Add validation for file.name existence before accessing split() method
- Ensure extensions array exists before calling includes() method
- Add similar checks in onDrop file filtering logic
- Fix TypeError that occurred when processing files with missing properties
This commit is contained in:
yangdx
2025-04-07 06:19:28 +08:00
parent d2efc80fad
commit 1d5c6570ea

View File

@@ -206,10 +206,15 @@ function FileUploader(props: FileUploaderProps) {
if (onUpload && acceptedFiles.length > 0) { if (onUpload && acceptedFiles.length > 0) {
// Filter out any files that might have been rejected by our custom validator // Filter out any files that might have been rejected by our custom validator
const validFiles = acceptedFiles.filter(file => { const validFiles = acceptedFiles.filter(file => {
// Skip files without a name
if (!file.name) {
return false;
}
// Check if file type is accepted // Check if file type is accepted
const fileExt = `.${file.name.split('.').pop()?.toLowerCase() || ''}`; const fileExt = `.${file.name.split('.').pop()?.toLowerCase() || ''}`;
const isAccepted = Object.entries(accept || {}).some(([mimeType, extensions]) => { const isAccepted = Object.entries(accept || {}).some(([mimeType, extensions]) => {
return file.type === mimeType || extensions.includes(fileExt); return file.type === mimeType || (Array.isArray(extensions) && extensions.includes(fileExt));
}); });
// Check file size // Check file size
@@ -260,10 +265,22 @@ function FileUploader(props: FileUploaderProps) {
multiple={maxFileCount > 1 || multiple} multiple={maxFileCount > 1 || multiple}
disabled={isDisabled} disabled={isDisabled}
validator={(file) => { validator={(file) => {
// Check if file type is accepted // Ensure file name exists
if (!file.name) {
return {
code: 'invalid-file-name',
message: t('documentPanel.uploadDocuments.fileUploader.invalidFileName',
{ fallback: 'Invalid file name' })
};
}
// Safely extract file extension
const fileExt = `.${file.name.split('.').pop()?.toLowerCase() || ''}`; const fileExt = `.${file.name.split('.').pop()?.toLowerCase() || ''}`;
// Ensure accept object exists and has correct format
const isAccepted = Object.entries(accept || {}).some(([mimeType, extensions]) => { const isAccepted = Object.entries(accept || {}).some(([mimeType, extensions]) => {
return file.type === mimeType || extensions.includes(fileExt); // Ensure extensions is an array before calling includes
return file.type === mimeType || (Array.isArray(extensions) && extensions.includes(fileExt));
}); });
if (!isAccepted) { if (!isAccepted) {