2012-03-23 4 views
5

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

+0

के संभावित डुप्लिकेट (http://stackoverflow.com/questions/2801042/ [div में छवियों कि डाटाबेस में संग्रहित दिखाने के लिए कैसे] कैसे-टू-शो-इमेज-इन-डिव-द-स्टोरेज-इन-डीबी) –

+0

@ डिओडियस नोप, यह एक जावास्क्रिप्ट प्रश्न है और यह जावा के लिए है। –

+0

@ शैलेश धन्यवाद क्या आप इसे उत्तर के रूप में स्वीकार कर सकते हैं? –

उत्तर

12

यह एचटीएमएल 5/ईएस 5 पर्यावरण (व्यावहारिक रूप से इंटरनेट एक्सप्लोरर 9-) को छोड़कर सब कुछ सरल है;

सबसे पहले आपको छवि की बाइनरी सामग्री को सरणीबफर में डाउनलोड करने की आवश्यकता है, फिर इसे बेस 64 डेटाौरी में परिवर्तित करें, जो वास्तव में एक स्ट्रिंग है। इसे ब्राउज़रों में स्थानीय स्टोरेज, इंडेक्सड डीबी या वेबएसक्यूएल, या यहां तक ​​कि एक कुकी (हालांकि बहुत कुशल नहीं है) में संग्रहीत किया जा सकता है; बाद में आप इस डेटाौरी को प्रदर्शित करने के लिए छवि स्रोत के रूप में सेट करें।

<script> 
    function showImage(imgAddress) { 
     var img = document.createElement("img"); 
     document.body.appendChild(img); 
     getImageAsBase64(imgAddress, function (base64data) { img.src = base64data; }); 
    }; 

    function getImageAsBase64(imgAddress, onready) { 
     //get from online or from whatever string store 
     var req = new XMLHttpRequest(); 
     req.open("GET", imgAddress, true); 
     req.responseType = 'arraybuffer'; //this won't work with sync requests in FF 
     req.onload = function() { onready(arrayBufferToDataUri(req.response)); }; 
     req.send(null); 
    }; 

    function arrayBufferToDataUri(arrayBuffer) { 
     var base64 = '', 
      encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/', 
      bytes = new Uint8Array(arrayBuffer), byteLength = bytes.byteLength, 
      byteRemainder = byteLength % 3, mainLength = byteLength - byteRemainder, 
      a, b, c, d, chunk; 

     for (var i = 0; i < mainLength; i = i + 3) { 
      chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2]; 
      a = (chunk & 16515072) >> 18; b = (chunk & 258048) >> 12; 
      c = (chunk & 4032) >> 6; d = chunk & 63; 
      base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d]; 
     } 

     if (byteRemainder == 1) { 
      chunk = bytes[mainLength]; 
      a = (chunk & 252) >> 2; 
      b = (chunk & 3) << 4; 
      base64 += encodings[a] + encodings[b] + '=='; 
     } else if (byteRemainder == 2) { 
      chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1]; 
      a = (chunk & 16128) >> 8; 
      b = (chunk & 1008) >> 4; 
      c = (chunk & 15) << 2; 
      base64 += encodings[a] + encodings[b] + encodings[c] + '='; 
     } 
     return "data:image/jpeg;base64," + base64; 
    } 

</script> 

मैं इस पद से ठीक बेस 64 रूपांतरण दिनचर्या उधार: http://jsperf.com/encoding-xhr-image-data/5

+0

क्या इससे मदद मिली? उत्तर के रूप में चिह्नित करें या अधिक जानकारी प्रदान करें। –

+0

सुझाव के लिए धन्यवाद। आपका कोड पूरी तरह से काम करता है। मैंने इसे फ़ायरफ़ॉक्स के लिए iMacros में उपयोग के लिए मॉड्यूल में लपेट लिया [https://github.com/nisaacson/download-file-base64 ](https://github.com/nisaacson/download-file-base64) – Noah

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

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