回答
它现在可能由于Chrome> = 21
function traverseFileTree(item, path) {
path = path || "";
if (item.isFile) {
// Get file
item.file(function(file) {
console.log("File:", path + file.name);
});
} else if (item.isDirectory) {
// Get folder contents
var dirReader = item.createReader();
dirReader.readEntries(function(entries) {
for (var i=0; i<entries.length; i++) {
traverseFileTree(entries[i], path + item.name + "/");
}
});
}
}
dropArea.addEventListener("drop", function(event) {
event.preventDefault();
var items = event.dataTransfer.items;
for (var i=0; i<items.length; i++) {
// webkitGetAsEntry is where the magic happens
var item = items[i].webkitGetAsEntry();
if (item) {
traverseFileTree(item);
}
}
}, false);
更多info:https://protonet.info/blog/html5-experiment-drag-drop-of-folders/
即使2年后,IE和Firefox似乎也不愿意实现这一点。 – 2014-07-03 09:09:59
关于如何在Chrome上使用的问题:http://stackoverflow.com/questions/5826286/how-do-i-use-google-chrome-11s-upload-folder-feature-in-my-own-code?lq = 1 – 2014-08-23 18:52:57
链接不再工作 – frodo2975 2015-02-19 21:16:48
在this message到HTML 5的邮件列表伊恩·希克森说:
HTML5现在已经在 一次上传多个文件。浏览器可以允许用户 一次选择多个文件,包括跨多个目录的 ;这是一个 位超出了规范的范围。
(另见原feature proposal。) 所以是安全的假设,他认为通过上传拖和下降也超出范围的文件夹。显然,这取决于浏览器为单个文件提供服务。
上传文件夹,也有一些其他的困难,如Lars Gunther描述:
这[...]建议必须有两个 检查(如果可行的话):
最大尺寸,阻止某人上传几张完整目录 上百张未压缩的原始图片...
即使省略了accept属性,也进行过滤。 Mac OS元数据 和Windows缩略图等应省略 。所有隐藏的文件和 目录应该默认排除为 。
嗯,我同意第2点...但只有在Web开发人员有方法确定如果他们想要启用隐藏文件的上传 - 因为隐藏文件总是有潜力的可以使用上传的文件夹。特别是如果文件夹是一个完整的文件分割成多个部分,如最终剪切文件可能。 – 2014-08-06 14:57:36
不同意超出范围:这是许多人想要做的事情不兼容的原因,所以应该指定它。 – 2014-08-23 18:50:02
现在你可以上传拖放和输入目录。
<input type='file' webkitdirectory >
和拖放(对于webkit浏览器)。
处理拖放文件夹。
<div id="dropzone"></div>
<script>
var dropzone = document.getElementById('dropzone');
dropzone.ondrop = function(e) {
var length = e.dataTransfer.items.length;
for (var i = 0; i < length; i++) {
var entry = e.dataTransfer.items[i].webkitGetAsEntry();
if (entry.isFile) {
... // do whatever you want
} else if (entry.isDirectory) {
... // do whatever you want
}
}
};
</script>
资源:
http://updates.html5rocks.com/2012/07/Drag-and-drop-a-folder-onto-Chrome-now-available
是否可以在不使用压缩文件夹的情况下进行下载? – user2284570 2015-08-28 09:38:37
是否HTML5允许文件夹的拖放上传或文件夹树?
只有Chrome支持此功能。它没有任何牵引力,并可能被删除。
编号:https://developer.mozilla.org/en/docs/Web/API/DirectoryReader#readEntries
火狐现在支持文件夹上传,2016年11月15日,在v50.0:https://developer.mozilla.org/en-US/Firefox/Releases/50#Files_and_directories
你可以拖放文件夹到Firefox或者您可以浏览并选择本地要上传的文件夹。它还支持嵌套在子文件夹中的文件夹。
这意味着您现在可以使用Chrome,Firefox,Edge或Opera上传文件夹。目前您无法使用Safari或Internet Explorer。
此功能将给予您所有的数组承诺丢弃的文件,像<input type="file"/>.files
:
function getFilesWebkitDataTransferItems(dataTransferItems) {
function traverseFileTreePromise(item, path='') {
return new Promise(resolve => {
if (item.isFile) {
item.file(file => {
file.filepath = path + file.name //save full path
files.push(file)
resolve(file)
})
} else if (item.isDirectory) {
let dirReader = item.createReader()
dirReader.readEntries(entries => {
let entriesPromises = []
for (let entr of entries)
entriesPromises.push(traverseFileTreePromise(entr, path + item.name + "/"))
resolve(Promise.all(entriesPromises))
})
}
})
}
let files = []
return new Promise((resolve, reject) => {
let entriesPromises = []
for (let it of dataTransferItems)
entriesPromises.push(traverseFileTreePromise(it.webkitGetAsEntry()))
Promise.all(entriesPromises)
.then(entries => {
//console.log(entries)
resolve(files)
})
})
}
用法:
dropArea.addEventListener("drop", function(event) {
event.preventDefault();
var items = event.dataTransfer.items;
getFilesFromWebkitDataTransferItems(items)
.then(files => {
...
})
}, false);
这应该是新接受的答案。它比其他答案要好,因为它在完成时返回一个承诺。但是有一些错误:'函数getFilesWebkitDataTransferItems(dataTransfer)'应该是'function getFilesWebkitDataTransferItems(items)','for(条目的入口)'应该是'for(允许条目的入口)'。 – RoccoB 2017-09-03 03:47:38
- 1. 是否允许用户将文件上传到app_code文件夹?
- 2. html5拖放文件上传
- 3. HTML5拖放n拖放文件上传
- 4. Robots.txt允许子文件夹,但不允许子文件夹
- 5. 启用文件夹上的权限以允许文件上传。
- 6. Upload Upload文件上传中的拖放文件夹
- 7. Wxpython浏览或拖放文件夹
- 8. 拖放 - 区分文件和文件夹
- 9. 批量拖放文件和文件夹
- 10. 拖动和jQuery的拖放文件夹上传,而不库
- 11. HTML5拖放和多个文件上传
- 12. *可恢复* html5拖放文件上传
- 13. 用html5和php上传多个文件到文件夹“上传”
- 14. 不允许文件夹浏览但允许文件请求(Apache)
- 15. 文件夹或文件夹
- 16. Eclipse'允许源文件夹的输出文件夹'
- 17. 允许访问Codeigniter中的\ application \文件夹内的文件夹
- 18. Htaccess不允许访问文件夹和子文件夹
- 19. 如何制作富文件:上传接受从文件夹中拖放文件?
- 20. htaccess //只允许某个文件或文件夹?
- 21. Rails文件上传:上传文件夹
- 22. 检查是否是文件或文件夹上的FTP
- 23. WordPress允许直接访问上传/子文件夹
- 24. 拒绝访问文件夹,但允许访问该文件夹内的文件
- 25. 在Android中的文件夹名称中是否允许“:”?
- 26. 无需拖放即可上传文件夹
- 27. 拖放图片并将其上传到多个文件夹
- 28. Adobe Air是否允许我“包装”现有的HTML页面以允许拖放文件上传?
- 29. 允许在laravel公用文件夹
- 30. 允许NGINX写入文件夹/ xibo/*
同为'INPUT TYPE = file':HTTP://计算器.com/questions/9518335/select-directory-for-html5 -multi-file-input-in-firefox – 2014-08-23 18:52:10