दिलचस्प पोस्ट
कैसे एक निर्दिष्ट निर्देशिका में npm स्थापित करने के लिए? मैं कैसे एक निश्चित स्थिति से मेल खाता है कि एक सरणी की वस्तुओं को ही रख सकते हैं? मोंगोज़ के माध्यम से मोंगो सरणी में वस्तुओं को पुश करें कॉम्बो बॉक्स: एक आइटम के लिए टेक्स्ट और वैल्यू जोड़ना (कोई बाध्यकारी स्रोत नहीं) IDENTITY_INSERT को बंद करने के लिए सेट किया गया है जब टेबल 'तालिका' में पहचान कॉलम के लिए स्पष्ट मान सम्मिलित नहीं किया जा सकता आर में प्लॉट पर मानक विचलन दिखाने के लिए त्रुटि बार जोड़ें जावास्क्रिप्ट regexp संख्या केवल चेक करें "सॉफ़्टवेयर के कारण के लिए आधिकारिक कारण बंधना: सॉकेट लिखने की त्रुटि" क्यों करता है (यह वास्तव में?) सूची <T> इन सभी इंटरफेस को लागू करें, न केवल IList <T>? Oozie: ओज़ी <जावा> कार्रवाई से मानचित्र-कमी शुरू करें? विवेक कैसे जावा में एक तारीख की जांच करें सी ++ 11 में मैं एक मानक पुस्तकालय कंटेनर को कुशलता से कैसे चुन सकता हूं? एएसपी.नेट वेब एपीआई प्रमाणीकरण कैसे स्ट्रिंग.इंडेक्स स्विफ्ट में काम करता है PHP के साथ img src प्राप्त करें

जावास्क्रिप्ट का उपयोग कर फ़ाइल के एमडी 5 हैश की गणना कैसे करें

जावास्क्रिप्ट का उपयोग कर सर्वर पर अपलोड करने से पहले फाइल के एमडी 5 हैश की गणना करने का कोई तरीका है?

वेब के समाधान से एकत्रित समाधान "जावास्क्रिप्ट का उपयोग कर फ़ाइल के एमडी 5 हैश की गणना कैसे करें"

जबकि एमडी 5 एल्गोरिथ्म के जेएस कार्यान्वयन हैं, पुराने ब्राउज़र आम तौर पर स्थानीय फाइल सिस्टम से फ़ाइलें पढ़ने में असमर्थ हैं

मैंने लिखा है कि 2009 में। तो नए ब्राउज़रों के बारे में क्या?

एक ब्राउज़र के साथ जो FileAPI का समर्थन करता है, आप * फाइल की सामग्री को पढ़ सकते हैं – उपयोगकर्ता को इसे चुनना पड़ता है, या तो एक <input> element या drag-and-drop के साथ जनवरी 2013 तक, यहां बताया गया है कि प्रमुख ब्राउज़रों को कैसे ढेर हो रहा है:

  • एफएफ 3.6 फ़्लेमरीडर का समर्थन करता है, एफएफ 4 भी अधिक फ़ाइल आधारित कार्यक्षमता का समर्थन करता है
  • क्रोम ने संस्करण 7.0.517.41 के बाद से फ़ाइलएपीआई का समर्थन किया है
  • इंटरनेट एक्सप्लोरर 10 में आंशिक फाइलएपीआई समर्थन है
  • ओपेरा 11.10 ने फ़ाइलएपीआई के लिए आंशिक समर्थन दिया है
  • सफारी – मुझे इस के लिए कोई अच्छा आधिकारिक स्रोत नहीं मिल सका, लेकिन यह साइट 5.1 से आंशिक समर्थन सुझाती है, 6.0 के लिए पूर्ण समर्थन । एक अन्य आलेख पुराने सफारी संस्करणों के साथ कुछ विसंगतियां बताता है

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

ध्यान रखें कि आपको एचटीएमएल 5 फाइलएपीआई की ज़रूरत है, इसलिए इसे जांचना सुनिश्चित करें। परीक्षण फ़ोल्डर में एक पूर्ण उदाहरण है

https://github.com/satazor/SparkMD5

यह क्रिप्टोजएस के एमडी 5 फ़ंक्शन और एचटीएमएलएफ़ फाइल रीडर एपीआई का उपयोग करके एमडी 5 हैश की गणना करना बहुत आसान है। निम्न कोड स्निपेट से पता चलता है कि आप बाइनरी डेटा कैसे पढ़ सकते हैं और एक ऐसी छवि से MD5 हैश की गणना करें जिसे आपके ब्राउज़र में खींच लिया गया है:

 var holder = document.getElementById('holder'); holder.ondragover = function() { return false; }; holder.ondragend = function() { return false; }; holder.ondrop = function(event) { event.preventDefault(); var file = event.dataTransfer.files[0]; var reader = new FileReader(); reader.onload = function(event) { var binary = event.target.result; var md5 = CryptoJS.MD5(binary).toString() console.log(md5); }; reader.readAsBinaryString(file); }; 

मैं खींचें और ड्रॉप क्षेत्र देखने के लिए कुछ सीएसएस जोड़ने की सलाह देता हूं:

 #holder { border: 10px dashed #ccc; width: 300px; height: 300px; } #holder.hover { border: 10px dashed #333; } 

ड्रैग एंड डॉप कार्यक्षमता के बारे में अधिक जानकारी यहां मिल सकती है: फ़ाइल एपीआई और फाइलरिडर

मैंने Google Chrome 32 संस्करण में नमूना का परीक्षण किया।

आप को FileAPI का उपयोग करने की आवश्यकता है यह नवीनतम एफएफ और क्रोम में उपलब्ध है, लेकिन IE9 नहीं है ऊपर बताए गए किसी भी एमडी 5 जेएस कार्यान्वयन को पकड़ो। मैंने इसे करने की कोशिश की और इसे छोड़ दिया क्योंकि जेएस बहुत धीमा था (बड़ी छवि फ़ाइलों पर मिनट)। अगर किसी ने टाइप एरे का इस्तेमाल करते हुए एमडी 5 को फिर से लिखना है तो उसे फिर से दोबारा देख सकते हैं।

कोड ऐसा कुछ दिखाई देगा:

 HTML: <input type="file" id="file-dialog" multiple="true" accept="image/*"> JS (w JQuery) $("#file-dialog").change(function() { handleFiles(this.files); }); function handleFiles(files) { for (var i=0; i<files.length; i++) { var reader = new FileReader(); reader.onload = function() { var md5 = binl_md5(reader.result, reader.result.length); console.log("MD5 is " + md5); }; reader.onerror = function() { console.error("Could not read the file"); }; reader.readAsBinaryString(files.item(i)); } } 

जेएस में फ़ाइल सिस्टम एक्सेस प्राप्त करने के लिए असंभव के अलावा, मैं क्लाइंट-जनरेटेड चेकसम में कोई भी विश्वास नहीं रखता। इसलिए किसी भी मामले में सर्वर पर चेकसम बनाना अनिवार्य है। – Tomalak अप्रैल 20 '0 9 14:05 पर

जो ज्यादातर मामलों में बेकार है आप चाहते हैं कि एमडी 5 क्लाइंट की तरफ गणना की गई, ताकि आप इसे सर्वर पक्ष पर पुनः कोडित कोड के साथ तुलना कर सकें और अगर निष्कर्ष निकाला जाए कि वे अलग-अलग होते हैं तो गलत हो गया था। मुझे ऐसा करने की ज़रूरत है जो अनुप्रयोगों में वैज्ञानिक डेटा की बड़ी फ़ाइलों के साथ काम कर रहे हैं, जहां uncorrupted फ़ाइलों को प्राप्त करना कुंजी थी मेरे मामले सरल थे, क्योंकि उपयोगकर्ताओं को उनके डेटा विश्लेषण टूल से पहले ही एमडी 5 की गणना की गई थी, इसलिए मुझे इसे एक टेक्स्ट फ़ील्ड के साथ पूछने की जरूरत थी।

फाइलों के हैश प्राप्त करने के लिए, बहुत सारे विकल्प हैं आम तौर पर समस्या यह है कि बड़ी फ़ाइलों के हैश प्राप्त करने में वास्तव में धीमी है

मैंने फाइल की शुरुआत के 64kb और इसके अंत के 64kb के साथ फाइलों की हैश प्राप्त करने वाली एक छोटी लाइब्रेरी बनाई।

लाइव उदाहरण: http://marcu87.github.com/hashme/ और लाइब्रेरी: https://github.com/marcu87/hashme

HTML5 + spark-md5 और Q

मान लें कि एक आधुनिक ब्राउज़र (जो कि एचटीएमएल 5 फाइल एपीआई का समर्थन करता है) का उपयोग कर रहा है, यहां बताया गया है कि आप एक बड़ी फाइल के एमडी 5 हैश की गणना कैसे करते हैं (यह चर की मात्रा पर हैश की गणना करेगा)

 function calculateMD5Hash(file, bufferSize) { var def = Q.defer(); var fileReader = new FileReader(); var fileSlicer = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice; var hashAlgorithm = new SparkMD5(); var totalParts = Math.ceil(file.size / bufferSize); var currentPart = 0; var startTime = new Date().getTime(); fileReader.onload = function(e) { currentPart += 1; def.notify({ currentPart: currentPart, totalParts: totalParts }); var buffer = e.target.result; hashAlgorithm.appendBinary(buffer); if (currentPart < totalParts) { processNextPart(); return; } def.resolve({ hashResult: hashAlgorithm.end(), duration: new Date().getTime() - startTime }); }; fileReader.onerror = function(e) { def.reject(e); }; function processNextPart() { var start = currentPart * bufferSize; var end = Math.min(start + bufferSize, file.size); fileReader.readAsBinaryString(fileSlicer.call(file, start, end)); } processNextPart(); return def.promise; } function calculate() { var input = document.getElementById('file'); if (!input.files.length) { return; } var file = input.files[0]; var bufferSize = Math.pow(1024, 2) * 10; // 10MB calculateMD5Hash(file, bufferSize).then( function(result) { // Success console.log(result); }, function(err) { // There was an error, }, function(progress) { // We get notified of the progress as it is executed console.log(progress.currentPart, 'of', progress.totalParts, 'Total bytes:', progress.currentPart * bufferSize, 'of', progress.totalParts * bufferSize); }); } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/q.js/1.4.1/q.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/spark-md5/2.0.2/spark-md5.min.js"></script> <div> <input type="file" id="file"/> <input type="button" onclick="calculate();" value="Calculate" class="btn primary" /> </div> 

एक एमडी 5 हैश बनाने के लिए इंटरनेट पर कुछ लिपियाँ हैं।

वेबटॉल्किट से एक अच्छा है, http://www.webtoolkit.info/javascript-md5.html

यद्यपि, मेरा मानना ​​है कि उसे स्थानीय फाइल सिस्टम तक पहुंच नहीं होगी क्योंकि इस एक्सेस सीमित है।

मौजूदा एचटीएमएल 5 के साथ यह एक बाइनरी फ़ाइल के एमडी 5 हैश की गणना करना संभव है, लेकिन मुझे लगता है कि इससे पहले चरण में प्रतिबंधी डेटा ब्लोबबिल्डर को स्ट्रिंग में परिवर्तित करने के लिए किया जाएगा, मैं यह कदम करने की कोशिश कर रहा हूं: लेकिन सफल नहीं हुए हैं

यहाँ मैंने कोशिश की है कोड: एक BlobBuilder को स्ट्रिंग में परिवर्तित, HTML5 जावास्क्रिप्ट में

मुझे विश्वास नहीं है कि फाइल अपलोड की सामग्री तक पहुंचने के लिए जावास्क्रिप्ट में कोई रास्ता नहीं है। इसलिए आप एमडी 5 राशि उत्पन्न करने के लिए फ़ाइल सामग्री को नहीं देख सकते।

आप फाइल को सर्वर पर भेज सकते हैं, जो फिर एमडी 5 राशि वापस भेज सकते हैं या फिर फाइल की सामग्री को वापस भेज सकते हैं .. लेकिन यह बहुत काम है और आपके प्रयोजनों के लिए संभवत: उपयुक्त नहीं है।

अच्छी तरह से एचटीएमएल 5 फाइल एपीआई (ब्लॉब इंटरफेस देखें) के साथ फाइल पढ़ने के लिए संभव है। परीक्षण नहीं किया गया लेकिन आप ऐसा कर सकते हैं शायद

इसके अलावा, आपको कभी ग्राहक पर भरोसा नहीं करना चाहिए अपलोड करने के बाद आपको सिर्फ हैश को फिर से करना होगा

एक प्लगइन के बिना आप उस बाइनरी डेटा का उपयोग नहीं कर सकते। आपको फ़्लैश-आधारित अपलोड टूल का उपयोग करना चाहिए। मेरे पास सहयोगी हैं जिन्होंने SWFUpload का उपयोग किया है, लेकिन मुझे नहीं पता कि फ़ाइल सामग्री में प्रवेश कैसे प्राप्त होगा आपको यह अनुमति देने के लिए स्वयं ही SWF को बदलना पड़ सकता है