Tôi biết rằng vấn đề này có thể trùng lặp nhưng vì không có giải pháp nào có thể giúp tôi, tôi đang đăng sự cố của riêng mình. Tôi có vùng thả nơi tôi muốn phát hiện xem mục đã kéo có phải là thư mục hoặc tệp hay không. Trong chrome tôi đạt được điều này bằng cách sử dụngPhát hiện thư mục kéo và thả HTML5 trong firefox. Thậm chí có thể không?
for (var i = 0; i < nrOfFiles; i++) {
var entry = e.originalEvent.dataTransfer.items[i].webkitGetAsEntry();
if (entry.isDirectory) {
//folder detection
}
trong firefox nó không thể sử dụng giải pháp trên (webkit) và sau khi trải qua nhiều giờ cố gắng để giải quyết việc này tôi đã đưa ra các giải pháp sau (và thất bại)
Tôi kiểm tra xem mục đã kéo không có loại và không có kích thước như dưới đây và trong hầu hết các trường hợp, nó hoạt động như mong đợi. Từ những gì tôi đã đọc này là không hiệu quả và không thành công tất cả các lần như một số tập tin có thể không có phần mở rộng tập tin vì vậy tôi cố gắng đọc tập tin như chuỗi nhị phân (readAsBinaryString) hoặc readAsArrayBuffer với FileReader API và bắt ngoại lệ trong trường hợp mục là không thể đọc được nhưng ngoại lệ không bao giờ bị ném.
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 ? } }}
Trong các giải pháp sau đây tôi đang cố gắng sử dụng mozGetDataAt là webkitGetAsEntry tương ứng (??? Không phải 100% về vấn đề này xin vui lòng chính xác cho tôi nếu tôi đã sai lầm) nhưng tôi đang nhận được một ngoại lệ an ninh.
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? }
Và ngoại trừ là:
Permission denied for <http://localhost:8080> to create wrapper for object of class UnnamedClass
Thực sự là có một cách để làm điều này trong firefox? Tôi không muốn dựa vào thư viện của bên thứ ba hoặc xử lý bên máy chủ nếu có thể. Bất kỳ đề xuất-ý kiến sẽ được nhiều đánh giá cao.
Cảm ơn
M
Có thể bây giờ! Xem câu trả lời của tôi: http://stackoverflow.com/a/33431704/195216 – dforce