diff --git a/packages/components/upload/__tests__/upload.test.tsx b/packages/components/upload/__tests__/upload.test.tsx
index 9595afa0d6..21a7b733d2 100644
--- a/packages/components/upload/__tests__/upload.test.tsx
+++ b/packages/components/upload/__tests__/upload.test.tsx
@@ -165,6 +165,88 @@ describe('', () => {
expect(keyList).toEqual(['test-file.txt', 'test-file2.txt'])
})
+ test('in beforeUpload return promise change data correctly to request', async () => {
+ const keyList: string[] = []
+ const beforeUpload = vi.fn((file: File) => {
+ return new Promise((resolve) => {
+ data.value.key = file.name
+ resolve(file)
+ })
+ })
+ const httpRequest = vi.fn((val) => {
+ keyList.push(val?.data?.key)
+ return Promise.resolve()
+ })
+
+ const data = ref({ key: '' })
+
+ const wrapper = mount(() => (
+
+ ))
+
+ const fileList = [
+ new File(['content'], 'test-file.txt'),
+ new File(['content2'], 'test-file2.txt'),
+ ]
+ mockGetFile(wrapper.find('input').element, fileList)
+
+ await wrapper.find('input').trigger('change')
+
+ expect(beforeUpload).toHaveBeenCalled()
+ await flushPromises()
+
+ expect(keyList).toEqual(['test-file.txt', 'test-file2.txt'])
+ })
+
+ test('upload files and save keyList', async () => {
+ const keyList: string[] = []
+ const beforeUpload = vi.fn((file: File) => {
+ return new Promise((resolve) => {
+ data.value.key = file.name
+ resolve(file)
+ })
+ })
+ const httpRequest = vi.fn((val) => {
+ keyList.push(val?.data?.key)
+ return Promise.resolve()
+ })
+
+ const data = ref({ key: '' })
+
+ const wrapper = mount(() => (
+
+ ))
+
+ // upload the first file
+ const firstFile = new File(['content'], 'test-file.txt')
+ mockGetFile(wrapper.find('input').element, [firstFile])
+ await wrapper.find('input').trigger('change')
+ await flushPromises()
+
+ // upload the second file
+ const secondFile = new File(['content2'], 'test-file2.txt')
+ mockGetFile(wrapper.find('input').element, [firstFile, secondFile])
+ await wrapper.find('input').trigger('change')
+ await flushPromises()
+
+ // check the keyList after uploading both files
+ expect(keyList).toEqual([
+ 'test-file.txt',
+ 'test-file.txt',
+ 'test-file2.txt',
+ ])
+ })
+
test('onProgress should work', async () => {
const onProgress = vi.fn()
const httpRequest = vi.fn(({ onProgress }) => {
diff --git a/packages/components/upload/src/upload-content.vue b/packages/components/upload/src/upload-content.vue
index ff7c903cf5..eb52778155 100644
--- a/packages/components/upload/src/upload-content.vue
+++ b/packages/components/upload/src/upload-content.vue
@@ -29,7 +29,7 @@