From d4123cd5580fed72d1cab796da0e2a19684d0873 Mon Sep 17 00:00:00 2001 From: btea <2356281422@qq.com> Date: Mon, 17 Mar 2025 20:55:04 +0800 Subject: [PATCH] fix(components): [upload] drag file add isDirectory attribute (#20012) * fix(components): [upload] drag file add isDirectory attribute * fix: compatibility test * fix: extend UploadRawFile --- docs/en-US/component/upload.md | 1 + packages/components/upload/src/upload-dragger.vue | 12 +++++++++++- packages/components/upload/src/upload.ts | 1 + 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/docs/en-US/component/upload.md b/docs/en-US/component/upload.md index d04625bd25..00104658b3 100644 --- a/docs/en-US/component/upload.md +++ b/docs/en-US/component/upload.md @@ -175,6 +175,7 @@ interface UploadProgressEvent extends ProgressEvent { interface UploadRawFile extends File { uid: number + isDirectory?: boolean } interface UploadRequestOptions { diff --git a/packages/components/upload/src/upload-dragger.vue b/packages/components/upload/src/upload-dragger.vue index 2dc73f257f..af0b9a106a 100644 --- a/packages/components/upload/src/upload-dragger.vue +++ b/packages/components/upload/src/upload-dragger.vue @@ -17,6 +17,8 @@ import { throwError } from '@element-plus/utils/error' import { uploadContextKey } from './constants' import { uploadDraggerEmits, uploadDraggerProps } from './upload-dragger' +import type { UploadRawFile } from './upload' + const COMPONENT_NAME = 'ElUploadDrag' defineOptions({ @@ -44,7 +46,15 @@ const onDrop = (e: DragEvent) => { e.stopPropagation() - const files = Array.from(e.dataTransfer!.files) + const files = Array.from(e.dataTransfer!.files) as UploadRawFile[] + const items = e.dataTransfer!.items || [] + files.forEach((file, index) => { + const item = items[index] + const entry = item?.webkitGetAsEntry?.() + if (entry) { + file.isDirectory = entry.isDirectory + } + }) emit('file', files) } diff --git a/packages/components/upload/src/upload.ts b/packages/components/upload/src/upload.ts index 65e802eb10..5971d36325 100644 --- a/packages/components/upload/src/upload.ts +++ b/packages/components/upload/src/upload.ts @@ -44,6 +44,7 @@ export type UploadUserFile = Omit & export type UploadFiles = UploadFile[] export interface UploadRawFile extends File { uid: number + isDirectory?: boolean } export type UploadRequestHandler = ( options: UploadRequestOptions