Skip to content

Commit 3995546

Browse files
authored
fix: supoort * and */* value (#309)
1 parent e2b5cd2 commit 3995546

File tree

2 files changed

+154
-0
lines changed

2 files changed

+154
-0
lines changed

src/attr-accept.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ export default (file: RcFile, acceptedFiles: string | string[]) => {
1515

1616
return acceptedFilesArray.some(type => {
1717
const validType = type.trim();
18+
// This is something like */*,* allow all files
19+
if (/^\*(\/\*)?$/.test(type)) {
20+
return true;
21+
}
1822
if (validType.charAt(0) === '.') {
1923
return endsWith(fileName.toLowerCase(), validType.toLowerCase());
2024
}

tests/uploader.spec.js

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,156 @@ describe('uploader', () => {
411411
});
412412
});
413413

414+
describe('accept', () => {
415+
if (typeof FormData === 'undefined') {
416+
return;
417+
}
418+
419+
let uploader;
420+
const handlers = {};
421+
422+
const props = {
423+
action: '/test',
424+
data: { a: 1, b: 2 },
425+
directory: true,
426+
onStart(file) {
427+
if (handlers.onStart) {
428+
handlers.onStart(file);
429+
}
430+
},
431+
};
432+
433+
function test(desc, value, files, expecptCallTimes) {
434+
it(desc, done => {
435+
uploader = mount(<Uploader {...props} accept={value} />);
436+
const input = uploader.find('input').first();
437+
input.simulate('change', { target: { files } });
438+
const mockStart = jest.fn();
439+
handlers.onStart = mockStart;
440+
setTimeout(() => {
441+
expect(mockStart.mock.calls.length).toBe(expecptCallTimes);
442+
done();
443+
}, 100);
444+
});
445+
}
446+
447+
test(
448+
'default',
449+
undefined,
450+
[
451+
{
452+
name: 'accepted.webp',
453+
},
454+
{
455+
name: 'accepted.png',
456+
},
457+
{
458+
name: 'accepted.txt',
459+
},
460+
],
461+
3,
462+
);
463+
464+
test(
465+
'support .ext',
466+
'.png',
467+
[
468+
{
469+
name: 'unaccepted.webp',
470+
},
471+
{
472+
name: 'accepted.png',
473+
},
474+
],
475+
1,
476+
);
477+
478+
test(
479+
'support .ext,ext',
480+
'.png,.txt',
481+
[
482+
{
483+
name: 'accepted.png',
484+
},
485+
{
486+
name: 'unaccepted.jpg',
487+
},
488+
{
489+
name: 'accepted.txt',
490+
},
491+
],
492+
2,
493+
);
494+
495+
test(
496+
'support image/type',
497+
'image/jpeg',
498+
[
499+
{
500+
name: 'unaccepted.png',
501+
type: 'image/png',
502+
},
503+
{
504+
name: 'accepted.jpg',
505+
type: 'image/jpeg',
506+
},
507+
],
508+
1,
509+
);
510+
511+
test(
512+
'support image/*',
513+
'image/*',
514+
[
515+
{
516+
name: 'accepted.png',
517+
type: 'image/png',
518+
},
519+
{
520+
name: 'accepted.jpg',
521+
type: 'image/jpeg',
522+
},
523+
{
524+
name: 'unaccepted.text',
525+
type: 'text/plain',
526+
},
527+
],
528+
2,
529+
);
530+
531+
test(
532+
'support *',
533+
'*',
534+
[
535+
{
536+
name: 'accepted.png',
537+
type: 'image/png',
538+
},
539+
{
540+
name: 'accepted.text',
541+
type: 'text/plain',
542+
},
543+
],
544+
2,
545+
);
546+
547+
test(
548+
'support */*',
549+
'*/*',
550+
[
551+
{
552+
name: 'accepted.png',
553+
type: 'image/png',
554+
},
555+
{
556+
name: 'accepted.text',
557+
type: 'text/plain',
558+
},
559+
],
560+
2,
561+
);
562+
});
563+
414564
describe('transform file before request', () => {
415565
let uploader;
416566
beforeEach(() => {

0 commit comments

Comments
 (0)