diff --git a/CHANGELOG.en-US.md b/CHANGELOG.en-US.md index ccf50bcf260..8a48c593272 100644 --- a/CHANGELOG.en-US.md +++ b/CHANGELOG.en-US.md @@ -1,5 +1,13 @@ # CHANGELOG +## NEXT_VERSION + +`NEXT_VERSION` + +### Features + +- `n-upload` supports dragging content (such as images) directly from web pages without saving to the local file system first, closes [#7215](https://github.com/tusen-ai/naive-ui/issues/7215) + ## 2.43.1 `2025-09-15` diff --git a/CHANGELOG.zh-CN.md b/CHANGELOG.zh-CN.md index 7c0e0300828..8395f11ed7a 100644 --- a/CHANGELOG.zh-CN.md +++ b/CHANGELOG.zh-CN.md @@ -1,5 +1,13 @@ # CHANGELOG +## NEXT_VERSION + +`NEXT_VERSION` + +### Features + +- `n-upload` 支持从网页直接拖拽内容(如图片)上传,无需先保存到本地文件系统,关闭 [#7215](https://github.com/tusen-ai/naive-ui/issues/7215) + ## 2.43.1 `2025-09-15` diff --git a/src/upload/src/UploadTrigger.tsx b/src/upload/src/UploadTrigger.tsx index 61cb41cdb70..74a50643329 100644 --- a/src/upload/src/UploadTrigger.tsx +++ b/src/upload/src/UploadTrigger.tsx @@ -73,16 +73,31 @@ export default defineComponent({ } const dataTransferItems = e.dataTransfer?.items if (dataTransferItems?.length) { - void getFilesFromEntries( - Array.from(dataTransferItems).map(item => item.webkitGetAsEntry()), - mergedDirectoryDndRef.value + const entries = Array.from(dataTransferItems).map(item => + item.webkitGetAsEntry() ) - .then((files) => { - handleFileAddition(files) - }) - .finally(() => { - dragOverRef.value = false - }) + if (entries.some(entry => entry !== null)) { + void getFilesFromEntries(entries, mergedDirectoryDndRef.value) + .then((files) => { + handleFileAddition(files) + }) + .finally(() => { + dragOverRef.value = false + }) + } + else { + const files = Array.from(dataTransferItems) + .map(item => item.getAsFile()) + .filter((file): file is File => file !== null) + .map(file => ({ + file, + entry: null, + source: 'dnd' as const + })) + + handleFileAddition(files.length > 0 ? files : null) + dragOverRef.value = false + } } else { dragOverRef.value = false