我知道这个问题可能会重复,但因为现有的解决方案都不能帮助我发布我自己的问题。 我有一个拖放区域,我想检测拖动的项目是文件夹还是文件。在Chrome中我使用HTML5在Firefox中拖放文件夹检测。它甚至有可能吗?
for (var i = 0; i < nrOfFiles; i++) {
var entry = e.originalEvent.dataTransfer.items[i].webkitGetAsEntry();
if (entry.isDirectory) {
//folder detection
}
在Firefox中是无法使用上述溶液(WebKit),因此花费很多时间试图解决这个问题后实现这一点,我想出了以下解决方案(和失败)
我检查拖动的项目是否没有类型和大小如下,并在大多数情况下,它是按预期工作。从我读过的这是不高效和不成功的,因为有些文件可能没有文件扩展名,所以我尝试使用FileReader API将文件读为二进制字符串(readAsBinaryString)或readAsArrayBuffer,并在产品是不可读,但从不抛出异常。
var files = e.originalEvent.dataTransfer.files; for (var i = 0; i < nrOfFiles; i++) { if (files[i].size === 0 && files[i].type==="") { try{ var reader = new FileReader(); reader.readAsBinaryString(files[i]); }catch(e){ //folder detection ? } }}
在下面的解决方案,我想使用mozGetDataAt作为对应的webkitGetAsEntry(???不是100%,这个请纠正我,如果我错了),但我得到一个安全异常。
var entry = e.originalEvent.dataTransfer.mozGetDataAt("application/x-moz-file",i); if (entry.isDirectory) { //not even reaching this statement. idk if isDirectory is applicable to entry //folder detection? }
,异常是:
Permission denied for <http://localhost:8080> to create wrapper for object of class UnnamedClass
实际上有没有办法在Firefox做到这一点?如果可能,我不想依赖第三方库或服务器端处理。任何建议意见将不胜感激。
感谢
中号
它现在可能!看到我的回答:http://stackoverflow.com/a/33431704/195216 – dforce