// copy from https://github.com/react-component/upload/blob/0d0ca2f65acca13f64199ffbb05054fb13c210ea/src/attr-accept.ts#L4 export function doAccept(file: File, acceptedFiles: string | string[]) { if (file && acceptedFiles) { const acceptedFilesArray = Array.isArray(acceptedFiles) ? acceptedFiles : acceptedFiles.split(',') const fileName = file.name || '' const mimeType = file.type || '' const baseMimeType = mimeType.replace(/\/.*$/, '') return acceptedFilesArray.some(type => { const validType = type.trim() // This is something like */*,* allow all files if (/^\*(\/\*)?$/.test(type)) { return true } // like .jpg, .png if (validType.charAt(0) === '.') { const lowerFileName = fileName.toLowerCase() const lowerType = validType.toLowerCase() let affixList = [lowerType] if (lowerType === '.jpg' || lowerType === '.jpeg') { affixList = ['.jpg', '.jpeg'] } return affixList.some(affix => lowerFileName.endsWith(affix)) } // This is something like a image/* mime type if (/\/\*$/.test(validType)) { return baseMimeType === validType.replace(/\/.*$/, '') } // Full match if (mimeType === validType) { return true } // Invalidate type should skip if (/^\w+$/.test(validType)) { console.warn(`Upload takes an invalidate 'accept' type '${validType}'.Skip for check.`) return true } return false }) } return true }