実現したいこと
JQueryで
”FileSystemオブジェクトをDataTransferItemオブジェクトに変換”または”FileSystemオブジェクトをFileListに追加”したいです。
前提
ドラッグ&ドロップでフォルダを複数選択できるようにしました。
しかし、フォルダがそのまま表示されてしまい、中身のファイルが取り出せなくて困っています。
ちなみに、inputタグでファイル選択ボタンとフォルダ選択ボタンを作成し、フォルダ選択ボタンからフォルダ選択した場合は、選択したフォルダのファイル一覧がデフォルトで?取得できるようです。
発生している問題・エラーメッセージ
単純に”FileSystemオブジェクトをFileListに追加”すると、fileを受け取るはずが、ないよと言われ追加できません。
エラー文追記:Uncaught (in promise) TypeError: Failed to execute 'add' on 'DataTransferItemList': parameter 1 is not of type 'File'
該当のソースコード
参考にしているサイトは、こちらです。
[参考サイト]https://qiita.com/wannabe/items/2b2f59a626313a8f58d4
以下、参考サイトそのままのコード
async function scanFiles(entry, tmpObject) { switch (true) { case (entry.isDirectory) : let entryReader = entry.createReader(); let entries = await new Promise(resolve => { entryReader.readEntries(entries => resolve(entries)); }); await Promise.all(entries.map(entry => scanFiles(entry, tmpObject))); break; case (entry.isFile) : tmpObject.push(entry); break; } }
以下、実現したいコード
function fileObject(items, Transfer) { for (let item of items) { let entry = item.webkitGetAsEntry(); if (entry.isDirectory) { // 省略 } else if (entry.isFile) { Transfer.items.add(entry); // 該当コード } } } let Transfer = new DataTransfer() $('~').on('drop', function (e) { e.preventDefault(); let items = e.originalEvent.dataTransfer.items; console.log(fileObject(items, Transfer)) })
試したこと
DataTransferオブジェクトを”.webkitGetAsEntry()”でFileSystemオブジェクトに変換して、ファイルの中身を取り出して、そのオブジェクトをFileListに追加みましたが、”fileを受け取るはずが、ない”とエラーになりました。
補足情報(FW/ツールのバージョンなど)
FileReaderでフォルダの中身を取り出せないか、参考サイトを探していますが、見つけられていません。
どなたかご存知の方がいらっしゃいましたら、教えていただきたいです。

あなたの回答
tips
プレビュー