2014-09-20 10 views
5

में बाइनरी ब्लॉब बनाएं मैं एक फ़ाइल क्लाइंट-साइड उत्पन्न कर रहा हूं, मेरे पास हेक्साडेसिमल में डेटा है और बस उपयोगकर्ता को जेनरेट की गई फ़ाइल डाउनलोड करना है।जेएस

var blob = new Blob([hexData], {type: "application/octet-stream"}); 
console.log(URL.createObjectURL(blob)); 

परिणामस्वरूप फ़ाइल एक सादा-पाठ फ़ाइल है जिसमें ASCII में हेक्स डेटा है। मैं ब्लॉब को द्विआधारी डेटा को शामिल करने के लिए मजबूर कैसे कर सकता हूं जैसा पाठ है?

उत्तर

2

आपको डेटा को बाइनरी सरणी में कनवर्ट करें और उसके बाद से एक ब्लॉब बनाएं।

var byteArray = new Uint8Array(hexdata.length/2); 
for (var x = 0; x < byteArray.length; x++){ 
    byteArray[x] = parseInt(hexdata.substr(x*2,2), 16); 
} 
var blob = new Blob([byteArray], {type: "application/octet-stream"}); 

http://jsfiddle.net/mowglisanu/15h9o3d5/

+0

मैं एक सरल और शायद क्लीनर (दर्शक की आंख) का सुझाव देना चाहता हूं। 'वर bytearray = नए Uint8Array (। Hexdata.match (/ {2}/छ) .map (ई => parseInt (ई, 16)));' यह दो बाइट जिसे में हेक्स डेटा विभाजन, उन्हें संख्या में हेक्स के रूप में पार्स करता है, फिर इन्हें Uin8Array कन्स्ट्रक्टर में एक सरणी देता है। –

2

@ ऊपर तो मैं क्रेडिट नहीं ले जा सकते मूसा के समाधान से व्युत्पन्न, लेकिन यह उसकी जवाब देने के लिए मेरी लंगड़ा टिप्पणी से एक जवाब के रूप में लिख करने के लिए स्पष्ट है।

var byteArray = new Uint8Array(hexdata.match(/.{2}/g) 
           .map(e => parseInt(e, 16))); 
var blob = new Blob([byteArray], {type: "application/octet-stream"}); 

शायद यह समझना आसान है? मुझे व्यक्तिगत रूप से लगता है कि यह स्पष्ट है।

+0

ब्लॉब पहला तर्क एक सरणी 'नया ब्लॉब ([बाइटएरे], ...) होना चाहिए; ' – Endless

+0

धन्यवाद। उफ़। फिक्स्ड। –