attr-accept.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import warning from "rc-util/es/warning";
  2. export default (function (file, acceptedFiles) {
  3. if (file && acceptedFiles) {
  4. var acceptedFilesArray = Array.isArray(acceptedFiles) ? acceptedFiles : acceptedFiles.split(',');
  5. var fileName = file.name || '';
  6. var mimeType = file.type || '';
  7. var baseMimeType = mimeType.replace(/\/.*$/, '');
  8. return acceptedFilesArray.some(function (type) {
  9. var 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. var lowerFileName = fileName.toLowerCase();
  17. var lowerType = validType.toLowerCase();
  18. var affixList = [lowerType];
  19. if (lowerType === '.jpg' || lowerType === '.jpeg') {
  20. affixList = ['.jpg', '.jpeg'];
  21. }
  22. return affixList.some(function (affix) {
  23. return lowerFileName.endsWith(affix);
  24. });
  25. }
  26. // This is something like a image/* mime type
  27. if (/\/\*$/.test(validType)) {
  28. return baseMimeType === validType.replace(/\/.*$/, '');
  29. }
  30. // Full match
  31. if (mimeType === validType) {
  32. return true;
  33. }
  34. // Invalidate type should skip
  35. if (/^\w+$/.test(validType)) {
  36. warning(false, "Upload takes an invalidate 'accept' type '".concat(validType, "'.Skip for check."));
  37. return true;
  38. }
  39. return false;
  40. });
  41. }
  42. return true;
  43. });