attr-accept.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { warning } from '../vc-util/warning';
  2. export default ((file, acceptedFiles) => {
  3. if (file && acceptedFiles) {
  4. const acceptedFilesArray = Array.isArray(acceptedFiles) ? acceptedFiles : acceptedFiles.split(',');
  5. const fileName = file.name || '';
  6. const mimeType = file.type || '';
  7. const baseMimeType = mimeType.replace(/\/.*$/, '');
  8. return acceptedFilesArray.some(type => {
  9. const validType = type.trim();
  10. // This is something like */*,* allow all files
  11. if (/^\*(\/\*)?$/.test(type)) {
  12. return true;
  13. }
  14. // like .jpg, .png
  15. if (validType.charAt(0) === '.') {
  16. const lowerFileName = fileName.toLowerCase();
  17. const lowerType = validType.toLowerCase();
  18. let affixList = [lowerType];
  19. if (lowerType === '.jpg' || lowerType === '.jpeg') {
  20. affixList = ['.jpg', '.jpeg'];
  21. }
  22. return affixList.some(affix => lowerFileName.endsWith(affix));
  23. }
  24. // This is something like a image/* mime type
  25. if (/\/\*$/.test(validType)) {
  26. return baseMimeType === validType.replace(/\/.*$/, '');
  27. }
  28. // Full match
  29. if (mimeType === validType) {
  30. return true;
  31. }
  32. // Invalidate type should skip
  33. if (/^\w+$/.test(validType)) {
  34. warning(false, `Upload takes an invalidate 'accept' type '${validType}'.Skip for check.`);
  35. return true;
  36. }
  37. return false;
  38. });
  39. }
  40. return true;
  41. });