2011-02-01 14 views
8

मैंने जेएस (AJAX POST) में एक ड्रैग और ड्रॉप फ़ाइल अपलोड स्क्रिप्ट सेट की है और मुझे सफारी में फ़ोल्डर फ़िल्टर करने में कठिनाई हो रही है - संस्करण 5.0.3 (6533.19.4)।एचटीएमएल 5 खींचें और ड्रॉप करें - सफारी में फ़ोल्डर का पता लगाएं (फाइललिस्ट, फ़ाइल)

जब भी मैं ब्राउज़र में एकाधिक फाइल/फ़ोल्डरों को छोड़ देता हूं, तो क्रोम फ़ोल्डरों को फ़िल्टर करेगा, और फ़ायरफ़ॉक्स .size के लिए 0 लौटाएगा, इसलिए उन मामलों के खिलाफ सुरक्षा करना मुश्किल है। सफारी, हालांकि, 68 बाइट फ़ाइल (फ़ोल्डर का आकार) वापस कर देगा।

क्या यह जांचने का कोई तरीका है कि यह File (FileList में आइटम) एक फ़ोल्डर है? (, .type कोशिश कर में कोई मतलब नहीं है, क्योंकि यह अज्ञात फ़ाइलों के लिए कुछ भी नहीं देता है फ़ोल्डर के रूप में रूप में अच्छी तरह ...) File/Blob API है कि इस हालत के लिए परीक्षण में कुछ भी खोजने के लिए प्रतीत नहीं कर सकते

एक थोड़ा और अधिक जानकारी:

मूल रूप से क्या होता है कि AJAX अनुरोध में एक खाली शरीर होता है। मैं FormData सहायता से अपलोड कर रहा हूँ:

var file = ...; // the dropped file 
var formData = new FormData(); 
formData.append("file", file); 
var xhr = new XMLHttpRequest(); 
... 
xhr.send(formData); 
+1

मैं इस के लिए एक बग रिपोर्ट पोस्ट: https://bugs.webkit.org/show_bug.cgi?id= 638 9 8 – meleyal

+0

क्रोम के नवीनतम संस्करण सफारी के समान मुद्दे पेश कर रहे हैं। क्या आपके पास इन्हें फ़िल्टर करने की मानक विधि को ट्रैक करने का कोई भाग्य है? –

+0

ऐसा लगता है कि इस दस्तावेज़ के आधार पर एक 'isDirectory' प्रॉपर्टी है https://developer.mozilla.org/en-US/docs/Web/API/FileSystemEntry/isDirectory लेकिन शायद सफारी में समर्थित नहीं हो सकता है। –

उत्तर

-2

क्यों सिर्फ oldschool फ़ाइल प्रत्यय के लिए जाँच नहीं? ज्यादातर मामलों जहां "file.suf" फ़ाइल और "फाइल" एक फ़ोल्डर है पर काम करना चाहिए ...

+1

चाल नहीं है (एक्सटेंशन के बिना फाइलें हैं) लेकिन बेहतर प्रतिक्रिया की कमी है, मैं इसे सही के रूप में चिह्नित कर रहा हूं। – biasedbit

+0

ऐसा लगता है कि एक बेहतर तरीका है। Google दस्तावेज़ अजाक्स ड्रॉप के दौरान फ़ाइलों और फ़ोल्डर्स को अलग करने में सक्षम है। यह फ़ाइल के रूप में, कोई एक्सटेंशन सही ढंग से फ़ाइलों को संसाधित करता है। वास्तव में दिलचस्पी है कि इन्हें कैसे हासिल किया गया था। –

0

आप पता लगा सकता है यह कच्चे पद डेटा का उपयोग कर एक फ़ाइल या फ़ोल्डर सर्वर पर था या नहीं: Get raw post data

मैंने देखा कि फ़ोल्डरों की शुरुआत में केवल सीमा सीमा है और अंत में कोई भी नहीं है। तो मूल रूप से ऐसा लगता है कि ब्राउज़र पोस्ट करना शुरू कर देता है और फिर अनुरोध पूरा करने से पहले बस बंद हो जाता है। (मैंने केवल सफारी के साथ इसका परीक्षण किया है, लेकिन मुझे लगता है कि यह अन्य ब्राउज़रों के साथ समान है।)

आप सत्र में असफल अपलोड को सहेज सकते हैं और फिर AJAX का उपयोग यह जांचने के लिए कर सकते हैं कि असफल अपलोड ने ऐसा अनुरोध उत्पन्न किया है या नहीं। आपके पास एक अतिरिक्त AJAX अनुरोध है, लेकिन कम से कम आप इसका पता लगा सकते हैं। यह अब तक का सबसे अच्छा विकल्प है।

0

हम FileReader के साथ एक फ़ाइल पढ़ सकते हैं। कोड इस तरह हो सकता है:

Array.prototype.forEach.call(e.dataTransfer.files, function (file) { 
    var reader = new FileReader(); 
    reader.onload = function (event) { 
    // it's a file 
    addFile(file); 
    }; 
    reader.onerror = function (event) { 
    alert("Uploading folders not supported in Safari"); 
    } 
    reader.readAsDataURL(file); 
}); 

फ़ोल्डरों यह त्रुटि दे देंगे के लिए:

Failed to load resource: The operation couldn’t be completed. (WebKitBlobResource error 4.) 
संबंधित मुद्दे