diff --git a/README.md b/README.md index c302482..bc86ced 100644 --- a/README.md +++ b/README.md @@ -96,6 +96,7 @@ Most browser support basic File selection with drag 'n' drop or file input: * [File API](https://developer.mozilla.org/en-US/docs/Web/API/File#Browser_compatibility) * [Drag Event](https://developer.mozilla.org/en-US/docs/Web/API/DragEvent#Browser_compatibility) * [DataTransfer](https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer#Browser_compatibility) +* [DataTransferItem.getAsFileSystemHandle()](https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem/getAsFileSystemHandle) * [``](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#Browser_compatibility) For folder drop we use the [FileSystem API](https://developer.mozilla.org/en-US/docs/Web/API/FileSystem) which has very limited support: diff --git a/src/file-selector.ts b/src/file-selector.ts index 31b6b36..176c622 100644 --- a/src/file-selector.ts +++ b/src/file-selector.ts @@ -121,6 +121,13 @@ function flatten(items: any[]): T[] { } function fromDataTransferItem(item: DataTransferItem) { + if ('getAsFileSystemHandle' in DataTransferItem.prototype) { + return (item as any).getAsFileSystemHandle().then((fileSystemHandle: any) => { + const file = fileSystemHandle.getFile(); + file.handle = fileSystemHandle; + return file; + }); + } const file = item.getAsFile(); if (!file) { return Promise.reject(`${item} is not a File`); @@ -185,4 +192,4 @@ async function fromFileEntry(entry: any) { // https://github.com/Microsoft/TypeScript/issues/3496#issuecomment-128553540 interface FileArray extends Array {} type FileValue = FileWithPath - | FileArray[]; + | FileArray[]; \ No newline at end of file