2011-09-29 19 views
5

HTML5 Rocks पर फ़ाइल अपलोड करने के बारे में कुछ अच्छे उदाहरण हैं लेकिन कुछ ऐसा है जो मेरे लिए पर्याप्त नहीं है।एचटीएमएल 5 फाइल एपीआई - टुकड़ा या नहीं?

जहां तक ​​मैं देखता हूं, उदाहरण के बारे में file slicing के बारे में उदाहरण कोड फ़ाइल से एक विशिष्ट हिस्सा प्राप्त कर रहा है और इसे पढ़ रहा है। जैसा कि नोट कहता है, जब हम बड़ी फाइलों से निपट रहे हैं तो यह सहायक होता है।

monitoring uploads के बारे में उदाहरण यह भी उपयोगी है जब हम बड़ी फ़ाइलों को अपलोड कर रहे हैं।

क्या मैं फ़ाइल को टुकड़े किए बिना सुरक्षित हूं? मेरा मतलब है सर्वर-साइड समस्याएं, स्मृति, इत्यादि। क्रोम वर्तमान में File.slice() का समर्थन नहीं करता है और यदि संभव हो तो मैं एक ब्लोएटेड jQuery प्लगइन का उपयोग नहीं करना चाहता हूं।

उत्तर

5

दोनों क्रोम और एफएफ समर्थन File.slice() लेकिन यह File.webkitSlice()File.mozSlice() जब its semantics changed कुछ समय पहले पहले से जुड़ा हुआ किया गया है। .zip फ़ाइल के हिस्से को पढ़ने के लिए here का उपयोग करने का एक और उदाहरण है। नए अर्थशास्त्र हैं:

Blob.webkitSlice( 
    in long long start, 
    in long long end, 
    in DOMString contentType 
); 

क्या आप इसे टुकड़े किए बिना सुरक्षित हैं? निश्चित रूप से, लेकिन याद रखें कि आप फ़ाइल को स्मृति में पढ़ रहे हैं। एचटीएमएल 5 रॉक्स ट्यूटोरियल एक संभावित प्रदर्शन सुधार के रूप में अपलोड को खंडित करने की पेशकश करता है। कुछ सभ्य सर्वर तर्क के साथ, आप एक असफल अपलोड से पुनर्प्राप्त करने जैसी चीजें भी आसानी से कर सकते हैं। उपयोगकर्ता एक पूरी 500MB फ़ाइल फिर से कोशिश करने के लिए अगर यह 99% :)

+0

और फिर वहाँ ओपेरा, कार्यान्वित '.llice()' लेकिन दो अलग-अलग तरीकों से, डब्ल्यू 3 सी और एक जो कि =/ –

+2

नहीं था [एमडीएन कहते हैं] (https://developer.mozilla.org/en-US/docs/DOM/Blob) कि, फ़ायरफ़ॉक्स 13 और क्रोम 21 के रूप में, 'टुकड़ा() 'अब prefixed नहीं है। –

+0

आप अधिकांश ब्राउज़रों के नए संस्करणों में उपसर्ग के बिना विधि का उपयोग कर सकते हैं। –

0

इस धब्बे के रूप में पारित करने के लिए फ़ाइल काट करने के लिए तरीका है पर विफल नहीं होगा:

function readBlob() { 
    var files = document.getElementById('files').files; 
    var file = files[0]; 
    var ONEMEGABYTE = 1048576; 
    var start = 0; 
    var stop = ONEMEGABYTE; 

    var remainder = file.size % ONEMEGABYTE; 
    var blkcount = Math.floor(file.size/ONEMEGABYTE); 
    if (remainder != 0) blkcount = blkcount + 1; 

    for (var i = 0; i < blkcount; i++) { 

     var reader = new FileReader(); 
     if (i == (blkcount - 1) && remainder != 0) { 
      stop = start + remainder; 
     } 
     if (i == blkcount) { 
      stop = start; 
     } 

     //Slicing the file 
     var blob = file.webkitSlice(start, stop); 
     reader.readAsBinaryString(blob); 
     start = stop; 
     stop = stop + ONEMEGABYTE; 

    } //End of loop 

} //End of readblob 
+0

'FileReader.readAsBinaryString()' बहिष्कृत है। यह अब [डब्ल्यू 3 सी फाइल एपीआई] में नहीं है (https://www.w3.org/TR/FileAPI/#dfn-filereader) वर्किंग ड्राफ्ट: '// async रीड विधियों' 'शून्य रीडएएसएरे बफर (ब्लॉब ब्लॉब); ' 'शून्य रीडएसटेक्स्ट (ब्लॉब ब्लॉब, वैकल्पिक डोमस्ट्रिंग लेबल);' 'शून्य पढ़ाएडडाटाउआर (ब्लॉब ब्लॉब);' –

संबंधित मुद्दे