2011-04-18 14 views
30

मैं बस उस फ़ाइल के आकार को सीमित करना चाहता हूं जिसे उपयोगकर्ता अपलोड कर सकता है।फ़ाइल अपलोड (एचटीएमएल इनपुट) के आकार को सीमित करें

मैंने अधिकतम लम्बाई = 20000 = 20k सोचा लेकिन यह बिल्कुल काम नहीं कर रहा है।

मैं ऑन रेल्स, नहीं पीएचपी चल रहा हूँ, लेकिन सोच रहा था कि यह HTML/CSS में ग्राहक के पक्ष करने के लिए बहुत सरल हो जाएगा, या jQuery का उपयोग कर एक अंतिम उपाय के रूप में। यह इतना बुनियादी है कि कुछ HTML टैग होना चाहिए जो मुझे याद आ रही है या इसके बारे में पता नहीं है।

आईई 7 +, क्रोम, एफएफ 3.6 + का समर्थन करना चाहते हैं। मुझे लगता है कि यदि आवश्यक हो तो मैं केवल आईई 8 + का समर्थन कर सकता हूं।

धन्यवाद।

+1

यह संभव है। कृपया [यह] देखें (http://stackoverflow.com/questions/3717793/javascript-file-upload-size- validation) प्रश्न। – sandSK

उत्तर

17

आप इसे क्लाइंट-साइड नहीं कर सकते हैं। आपको इसे सर्वर पर करना होगा।

संपादित करें: यह उत्तर पुराना है!

इस संपादन के समय के रूप में, HTML फ़ाइल API mostly supported on all major browsers है।

मैं समाधान के साथ एक अद्यतन प्रदान करता हूं, लेकिन @ mark.inman.winning already did it

ध्यान रखें कि क्लाइंट पर अभी सत्यापन करना संभव है, फिर भी आपको सर्वर पर इसे सत्यापित करना चाहिए। सभी क्लाइंट साइड सत्यापन को बाईपास किया जा सकता है।

+2

आप कह रहे हैं कि क्लाइंट-साइड करना असंभव है? क्लाइंट-साइड के लिए एक सुरुचिपूर्ण समाधान होना चाहिए ... मुझे "असंभव" शब्द पसंद नहीं है :) – delphi

+2

हां, अभी यह असंभव है। HTML5 में एक नई फ़ाइल एपीआई के कुछ ड्राफ्ट हैं, लेकिन इस समय कोई ब्राउज़र पूरी तरह से इसका समर्थन नहीं करता है। – Andre

+2

देखें: http://www.cs.tut.fi/~jkorpela/forms/file.html, "फ़ाइल आकार पर प्रतिबंध सेट करना", क्लाइंट-साइड करने का प्रयास क्यों करना व्यर्थ है। – magma

57

यह पूरी तरह से संभव है। जावास्क्रिप्ट का प्रयोग करें।

मैं इनपुट तत्व का चयन करने के लिए jQuery का उपयोग करता हूं। मैंने इसे एक बदलाव कार्यक्रम के साथ स्थापित किया है।

$("#aFile_upload").on("change", function (e) { 

    var count=1; 
    var files = e.currentTarget.files; // puts all files into an array 

    // call them as such; files[0].size will get you the file size of the 0th file 
    for (var x in files) { 

     var filesize = ((files[x].size/1024)/1024).toFixed(4); // MB 

     if (files[x].name != "item" && typeof files[x].name != "undefined" && filesize <= 10) { 

      if (count > 1) { 

       approvedHTML += ", "+files[x].name; 
      } 
      else { 

       approvedHTML += files[x].name; 
      } 

      count++; 
     } 
    } 
    $("#approvedFiles").val(approvedHTML); 

}); 

उपरोक्त कोड सबमिट करने से पहले सबमिट किए गए सभी फ़ाइल नामों को सहेजता है, जो सबमिट करने से पहले मुझे प्रस्तुत करने के योग्य हैं। मैं jQuery का उपयोग करके एक इनपुट तत्व के वैल में "अनुमोदित" फ़ाइलों को जोड़ता हूं, इसलिए सबमिट किया गया एक फॉर्म उन फ़ाइलों के नाम भेजेगा जिन्हें मैं सहेजना चाहता हूं। सभी फाइलें जमा की जाएंगी, हालांकि, अब सर्वर की तरफ हमें इन्हें फ़िल्टर करना होगा। मैंने अभी तक इसके लिए कोई कोड नहीं लिखा है, लेकिन अपनी कल्पना का उपयोग करें। मुझे लगता है कि कोई इसे लूप के लिए पूरा कर सकता है और इनपुट फ़ील्ड से भेजे गए नामों से मेल खाता है और उन्हें $ _FILES (PHP Superglobal, माफ करना, मुझे रूबी फ़ाइल वैरिएबल नहीं पता) चर से मिलान कर सकते हैं।

मेरा मुद्दा यह है कि आप जमा करने से पहले फ़ाइलों के लिए चेक कर सकते हैं। मैं ऐसा करता हूं और फिर फॉर्म को सबमिट करने से पहले इसे उपयोगकर्ता को आउटपुट करता हूं, ताकि वे यह जान सकें कि वे मेरी साइट पर क्या अपलोड कर रहे हैं। जो कुछ भी मानदंडों को पूरा नहीं करता है वह उपयोगकर्ता को वापस प्रदर्शित नहीं होता है और इसलिए उन्हें पता होना चाहिए कि फाइलें बहुत बड़ी नहीं हैं। यह सभी ब्राउज़रों पर काम करना चाहिए क्योंकि मैं फॉर्मडाटा ऑब्जेक्ट का उपयोग नहीं कर रहा हूं।

+0

दिलचस्प। इस समाधान के साथ क्या समस्याएं हैं? – delphi

+10

आप इसे क्लाइंट साइड नहीं कर सकते हैं और उम्मीद करते हैं कि यह हमेशा काम करे। यदि सर्वर सर्वर पर भी महत्वपूर्ण जांच है, तो अन्य लोग oversize फ़ाइलों को अपलोड करने के लिए फॉर्म (या अन्य क्लाइंट साइड माध्यमों) की संशोधित प्रतियों का उपयोग करेंगे। सर्वर साइड चेक लॉक की तरह हैं, क्लाइंट साइड चेक पोस्ट-पोस्ट नोट की तरह हैं जो कहते हैं "बाहर रखें"। पहले दरवाजा बंद करें, फिर "बाहर रखें" चिह्न डालें। – user340140

+1

@ user340140 जब तक क्लाइंट जावास्क्रिप्ट का समर्थन करता है तब तक आप कर सकते हैं। यदि ग्राहक केवल यह नहीं बताता है कि साइट को जावास्क्रिप्ट को सक्षम करने की आवश्यकता है। जावास्क्रिप्ट में एक फ़ाइल रीडर है जो अनिवार्य रूप से धोखा नहीं जा सकता है, यह थोड़ा सा पढ़ता है, इसलिए एक छोटी सी फ़ाइल प्राप्त करने की कोई चिंता नहीं है जो गुप्त रूप से एक और आकार है। सर्वर पक्ष पसंदीदा "सुरक्षित" विधि है, लेकिन मुझे नहीं लगता कि जावास्क्रिप्ट फ़ाइल आकार के बारे में बात करते समय सुरक्षित क्यों नहीं है। –

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