2012-07-19 8 views
5

के साथ सेवा करती हैं, मैं समझता हूं कि मोंगोब छवियों को दो तरीकों से स्टोर कर सकता है।मोंगोद में स्टोर छवियां उन्हें नोडजेस

    एक नियमित रूप से दस्तावेज़ में
  1. बड़े चित्र के प्रबंधन के लिए Gridfs के माध्यम से के रूप में द्विआधारी
  2. छवि भंडारण के द्वारा।
सरलता के लिए

और क्योंकि सभी चित्रों मैं सर्वर की योजना छोटे हैं, मैं विकल्प 1.

के लिए जाने के लिए एक ब्राउज़र मैं NodeJS उपयोग कर रहा हूँ के लिए छवियों को प्रस्तुत करने के लिए होगा।

मेरा सवाल यह है कि यह कितना मुश्किल होगा? आप बाइनरी डेटा को एक वास्तविक छवि में कैसे बदल सकते हैं जिसे ब्राउज़र समझ जाएगा? किस प्रकार का एन्कोडिंग शामिल है?

क्या आप मुझे वेब पर कहीं और ट्यूटोरियल/उदाहरणों के लिए इंगित कर सकते हैं?

जिस तरह से मुझे पता है कि यह प्रदर्शन कारणों के लिए अच्छा विचार नहीं हो सकता है, मैं एक बार सेवा की गई छवियों को कैश करने की योजना बना रहा हूं। मैं सिर्फ फाइल-सिस्टम से बचने के लिए चाहता हूं।

उत्तर

5

मैं मोंगोडीबी से छवियों की सेवा के खिलाफ दृढ़ता से सलाह दूंगा।

उन्हें स्थिर स्थलीय (एस 3) पर स्टोर करना बेहतर होगा और शायद मोंगोडीबी में पथ बनाए रखना बेहतर होगा।


आप शायद MongoDB में फ़ाइल डाल करने के लिए बेस 64 एन्कोडिंग का प्रयोग करेंगे: http://www.greywyvern.com/code/php/binary2base64/ (या बस base64 खोल उपयोगिता)।

यदि आप नियमित दस्तावेजों का उपयोग कर रहे हैं तो प्रदर्शन लागत अपेक्षाकृत कम है (जब तक कैशिंग अच्छा है)। यदि आप एक मिश्रित डेटाबेस का उपयोग कर रहे हैं जहां आपके पास ग्रिडएफएस और नियमित दस्तावेज हैं तो आपको अपने सर्वर पर बहुत सी रैम की आवश्यकता होगी - ग्रिडएफएस प्रश्न दस्तावेज़ क्वेरी से पूरी तरह से अलग होंगे।

छवि परिवर्तित इस तरह काम कर सकते हैं:

var base64Data = imagefile.replace(/^data:image\/png;base64,/,""), 
var dataBuffer = new Buffer(base64Data, 'base64'); 

// below line won't actually work but it's something along the lines of what you want: 

db.foo.insert({magic: 123, etc... img: dataBuffer.toString()}) 
+0

कि बहुत उपयोगी है प्रस्तुत करना होगा। अब मुझे पता है कि छवियों को कैसे स्टोर किया जाए। क्या आप कृपया अपने उत्तर का विस्तार करने के लिए विस्तार कर सकते हैं कि मैं छवियों की सेवा कैसे कर सकता हूं? – jamjam

+0

मेरा मतलब है कि यह इस बात पर निर्भर करेगा कि आपने उन्हें कैसे पूछताछ की? 'var c = db.foo.find ({imgname:" something "}; console.log (c.img)' यह आपका सर्वर है ... मुझे पूरी तरह से यकीन नहीं है कि आपको सामान कैसे प्रदान करना है - मुझे लगता है कि आप नोड का उपयोग कर रहे हैं? – ranman

+0

क्वेरी समस्या नहीं है, मैं डेटा प्राप्त कर सकता हूं। लेकिन वेब ब्राउज़र को सामान्य छवि के रूप में प्रस्तुत करने के लिए मैं इस बाइनरी डेटा के साथ क्या करूँ? – jamjam

2

सभी आप अपने वेब ब्राउज़र सामग्री प्रस्तुत करना है करने के लिए क्या करने की जरूरत सही हेडर और प्रतिक्रिया शरीर भेजना है।

तो, मान लीजिए कि आप एक पीएनजी छवि प्रस्तुत करने की कोशिश कर रहे हैं, तो आपका mimetype image/png होगा और फिर प्रतिक्रिया फ़ाइलों को छवि फ़ाइलों बाइट जोड़ें।

ब्राउज़र तो प्रकार पीएनजी की एक छवि होने के रूप में इस प्रतिक्रिया की व्याख्या और यह उचित रूप से

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