2012-05-10 8 views
5

में इसे पढ़ने से पहले फ़ाइल अपलोड के आकार का निर्धारण करें Apache FileUpload लाइब्रेरी का उपयोग करने के दो तरीके हैं।Apache FileUpload स्ट्रीमिंग API

FileUpload

http://commons.apache.org/fileupload/using.html

और स्ट्रीमिंग FileUpload एपीआई

http://commons.apache.org/fileupload/streaming.html

वे दोनों सिवाय इसके कि स्ट्रीमिंग एपीआई प्रक्रिया से पहले फ़ाइल आकार की जाँच के लिए एक रास्ता है प्रतीत नहीं होता है महान काम धारा।

ऐसा इसलिए है क्योंकि स्ट्रीमिंग एपीआई मूल रूप से फ़ाइल आकार को नहीं जानता है या क्योंकि मुझे मल्टीपार्ट अपलोड आकार प्राप्त करने के लिए कुछ शीर्षलेख या कुछ मैन्युअल रूप से पढ़ने की आवश्यकता है?

उत्तर

14

पूरे HTTP अनुरोध निकाय के बिना मल्टीपार्ट अनुरोध के किसी हिस्से के आकार को जानने का कोई तरीका नहीं है। और एक बार HTTP अनुरोध निकाय की खपत शुरू हो जाने के बाद, आप इसे आधे रास्ते तक नहीं रोक सकते हैं। प्रतिक्रिया को कभी भी वापस करने से पहले इसे अंतिम बाइट तक उपभोग किया जाना चाहिए। यह सिर्फ HTTP और टीसीपी/आईपी की प्रकृति है। सर्वर मेमोरी उपयोग को कम रखने के लिए, हालांकि, जब आप आकार से अधिक होते हैं तो आप केवल बाइट को छोड़ सकते हैं (यानी इसे पढ़ने के लूप के अंदर जांचें और उन्हें किसी भी चर के लिए असाइन न करें)।

आपका सर्वोत्तम शर्त अपलोड होने से पहले जावास्क्रिप्ट में फ़ाइल की लंबाई को सत्यापित करना है। यह ब्राउज़र supporting एचटीएमएलएपीआई में समर्थित है। फ़ायरफ़ॉक्स, क्रोम, सफारी, ओपेरा और एंड्रॉइड के वर्तमान संस्करण इसका समर्थन करते हैं। आईई 9 अभी तक इसका समर्थन नहीं करता है, यह भविष्य में आईई 10 में होगा।

<input type="file" ... onchange="checkFileSize(this)" /> 

इस

function checkFileSize(inputFile) { 
    var max = 10 * 1024 * 1024; // 10MB 

    if (inputFile.files && inputFile.files[0].size > max) { 
     alert("File too large."); // Do your thing to handle the error. 
     inputFile.value = null; // Clear the field. 
    } 
} 
Balus को सम्मान के साथ
+0

तरह checkFileSize() नज़र कुछ ... सर्वर साइड पर, कहाँ के बाद से ओपी उस के बारे में और ग्राहक (जे एस) की ओर नहीं पूछ रहा है। .. यह जांचने का एक अच्छा तरीका नहीं है। शीर्षलेख "सामग्री-लंबाई" क्लाइंट द्वारा सेट किया गया है और भरोसा नहीं किया जा सकता है या नहीं। सर्वर पक्ष पर, स्ट्रीमिंग एपीआई और हेडर से "सामग्री-लंबाई" का उपयोग करके, कोई भी निर्धारित कर सकता है कि फाइल "हो सकता है" कितनी बड़ी हो सकती है: ContentLength (sum) - हेडर बाइट फ़ाइल-आइटम प्रारंभ होने तक पढ़ते हैं बहु-भाग अनुरोध में पहुंचे। स्ट्रीमिंग एपीआई का उपयोग करके, बहुत बड़े अपलोड के खिलाफ सुरक्षा के लिए भाग और योग पढ़ें। –