diff --git a/src/helpers.ts b/src/helpers.ts index da6ceae..06b5f8c 100644 --- a/src/helpers.ts +++ b/src/helpers.ts @@ -219,11 +219,14 @@ export function prepare( }) Object.keys(fileData).forEach(key => { const options = (requestData[key] as FileData).getOptions() - formData.append( - key, - fileData[key], - useNativeFormData ? options?.filename : (options as any), - ) + const files = Array.isArray(fileData[key]) ? fileData[key] : [fileData[key]] + files.forEach((file: Blob) => { + formData.append( + key, + file, + useNativeFormData ? options?.filename : (options as any), + ) + }) }) return formData as any } diff --git a/tests/__snapshots__/helpers.test.ts.snap b/tests/__snapshots__/helpers.test.ts.snap index 8d1e8b9..32c8cd4 100644 --- a/tests/__snapshots__/helpers.test.ts.snap +++ b/tests/__snapshots__/helpers.test.ts.snap @@ -155,6 +155,28 @@ Object { } `; +exports[`prepare 文件处理: file-multiple 1`] = ` +Array [ + Array [ + "file", + "text1", + ], + Array [ + "file", + "text2", + ], +] +`; + +exports[`prepare 文件处理: file-single 1`] = ` +Array [ + Array [ + "file", + "text1", + ], +] +`; + exports[`prepare 查询参数支持数组: brackets 1`] = ` Object { "allData": Object {}, diff --git a/tests/helpers.test.ts b/tests/helpers.test.ts index 3fe410a..839c666 100644 --- a/tests/helpers.test.ts +++ b/tests/helpers.test.ts @@ -176,4 +176,47 @@ describe('prepare', () => { ), ).toMatchSnapshot('json') }) + + test('文件处理', async () => { + const payload = prepare( + { path: '/test' } as Partial as any, + { + file: new FileData( + new Blob(['1'], { + type: 'text1', + }), + ), + }, + ) + const files: any[] = [] + payload.getFormData().forEach((v, k) => { + files.push([k, v]) + }) + for (const file of files) { + file[1] = file[1] instanceof File ? file[1].type : file[1] + } + expect(files).toMatchSnapshot('file-single') + + const payload2 = prepare( + { path: '/test' } as Partial as any, + { + file: new FileData([ + new Blob(['1'], { + type: 'text1', + }), + new Blob(['2'], { + type: 'text2', + }), + ]), + }, + ) + const files2: any[] = [] + payload2.getFormData().forEach((v, k) => { + files2.push([k, v]) + }) + for (const file of files2) { + file[1] = file[1] instanceof File ? file[1].type : file[1] + } + expect(files2).toMatchSnapshot('file-multiple') + }) })