2012-03-23 25 views
8

के साथ मोंगो (ग्रिडएफएस) में संग्रहीत छवि प्रस्तुत करें मेरे पास ग्रिडएफएस का उपयोग करके मोंगो में संग्रहीत एक छोटी .png फ़ाइल है। मैं नोड + एक्सप्रेस + जेड का उपयोग कर अपने वेब ब्राउजर में छवि को प्रदर्शित करना चाहता हूं। मैं छवि ठीक उदा .:नोड + जेड + एक्सप्रेस

FileRepository.prototype.getFile = function(callback,id) { 
this.gs = new GridStore(this.db,id, 'r'); 
this.gs.open(callback); 
}; 

प्राप्त कर सकते हैं, लेकिन मैं कैसे जेड देखें इंजन का उपयोग कर इसे प्रस्तुत करने के लिए पता नहीं है। प्रलेखन में कोई जानकारी प्रतीत नहीं होती है।

क्या कोई मुझे सही दिशा में इंगित कर सकता है?

धन्यवाद!

उत्तर

16

मुझे यह पता चला (धन्यवाद तीमुथियुस!)। समस्या इन सभी प्रौद्योगिकियों की मेरी समझ थी और वे एक साथ कैसे फिट बैठते थे। किसी और को जो नोड, एक्सप्रेस और जेड का उपयोग कर MongoDB GridFS से छवियों को प्रदर्शित करने में रुचि रखते है ... के लिए

MongoDB में मेरे दस्तावेज़ छवि GridFS में जमा हो जाती है जो एक ObjectId एक स्ट्रिंग के रूप में जमा है के लिए एक संदर्भ है। जैसे MyEntity {ImageId: '4f6d39ab519b481eb4a5cf52'} < - एनबी: ऑब्जेक्ट आईडी का स्ट्रिंग प्रस्तुति। एक स्ट्रिंग के रूप में इसे संग्रहीत करने का कारण था क्योंकि ऑब्जेक्टआईडी मुझे रूटिंग में दर्द दे रहा था क्योंकि यह बाइनरी के रूप में प्रस्तुत किया गया था और मैं इसे ठीक करने का तरीका नहीं समझ पाया। (शायद कोई यहां मदद कर सकता है?)। वैसे भी, समाधान मैं नीचे है:

FileRepository - GridFS से छवि को पुनः प्राप्त, मैं एक स्ट्रिंग ईद में पास है, जो मैं तो में बदलने का एक BSON ObjectId (आप भी फ़ाइल नाम से फ़ाइल प्राप्त कर सकते हैं) :

FileRepository.prototype.getFile = function(callback,id) { 
    var gs = new GridStore(this.db,new ObjectID(id), 'r'); 
    gs.open(function(err,gs){ 
     gs.read(callback); 
    }); 
}; 

जेड खाका - प्रस्तुत एचटीएमएल मार्कअप:

img(src='/data/#{myentity.ImageId}') 
01 गतिशील छवियों के लिए मार्ग:

app.get('/data/:imgtag', function(req, res) { 
    fileRepository.getFile(function(error,data) { 
    res.writeHead('200', {'Content-Type': 'image/png'}); 
    res.end(data,'binary'); 
    }, req.params.imgtag); 
}); 

और वह काम किया है: रूटिंग (का उपयोग करते हुए एक्सप्रेस) मैं सेटअप 'imgtag/डेटा /' -

App.JS फ़ाइल। कोई सवाल मुझे बताएं :)

8

मैं यहां क्या करने की कोशिश कर रहा हूं, इसके बारे में थोड़ा उलझन में हूं, क्योंकि जेड टेक्स्ट आउटपुट (जैसे एचटीएमएल) के लिए एक संघीय मार्कअप भाषा है, बाइनरी सामग्री नहीं।

app.get/'images/:imgtag', function(req, res) { 
    res.render('image', {imgtag: req.params.imgtag); 
}); 

तो इस कोशिश:

app.get/'images/:imgtag', function(req, res) { 
    filerep.getFile(function(imgdata) { 
     res.header({'Content_type': 'image/jpeg'}) 
     res.end(imgdata); 
    }, req.params.imgtag); 
}); 

कि साथ HTTP अनुरोध के लिए एक प्रतिक्रिया के रूप में कच्चे फ़ाइल भेज देंगे

आप जेड का उपयोग कर रहे जब से तुम शायद कुछ इस तरह है सही माइम प्रकार। यदि आप टेम्पलेट (जैसे एक छवि पॉपअप) वितरित करने के लिए जेड का उपयोग करना चाहते हैं तो आप पॉपअप के लिए एक अलग मार्ग का उपयोग कर सकते हैं या यहां तक ​​कि डेटा का उपयोग कर सकते हैं: uri और पृष्ठ में छवि डेटा को एन्कोड करें।

+0

माइम प्रकार को ठीक करें या इसे ग्रिडफ़ –

+0

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