2015-06-23 6 views
12

से फ़ाइल (छवि) के लिए बफर कैसे प्राप्त कर सकता हूं, मैं एक पीडीएफ में एक छवि डालने की कोशिश कर रहा हूं जिसे मैं पीडीएफकिट के साथ सर्वर-साइड बना रहा हूं। मैं अपनी फाइलों को स्टोर करने के लिए cfs: ड्रॉपबॉक्स का उपयोग कर रहा हूं। इससे पहले कि जब मैं सीवी का उपयोग कर रहा था: फाइल सिस्टम, छवियों को मेरे पीडीएफ के कारण में जोड़ना आसान था, वे वहां थे। अब जब वे दूरस्थ रूप से संग्रहीत हैं, मुझे यकीन नहीं है कि उन्हें कैसे जोड़ना है, क्योंकि पीडीएफकिट केवल यूआरएल के साथ छवियों को जोड़ने का समर्थन नहीं करता है। हालांकि, यह एक बफर स्वीकार करेगा। मैं अपने संग्रह फ़ाइलों से बफर कैसे प्राप्त कर सकता हूं?मैं संग्रह फ़ाइल

var portrait = Portraits.findOne('vS2yFy4gxXdjTtz5d'); 
readStream = portrait.createReadStream('portraits'); 

मैं बफर के दो तरीके हो रही कोशिश की अब तक::

अब तक मैं इस तरह कुछ है

पहले DATAMAN का उपयोग कर, लेकिन पिछले आदेश वापस कभी नहीं आता है:

var dataMan = new DataMan.ReadStream(readStream, portrait.type()); 
var buffer = Meteor.wrapAsync(Function.prototype.bind(dataMan.getBuffer, dataMan))(); 

दूसरा स्ट्रीम मैन्युअल रूप से बफरिंग:

var buffer = new Buffer(0); 
readStream.on('readable', function() { 
    buffer = Buffer.concat([buffer, readStream.read()]); 
}); 
readStream.on('end', function() { 
    console.log(buffer.toString('base64')); 
}); 

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

+0

"कभी वापस नहीं आता" से आपका क्या मतलब है? आप इन समाधानों का उपयोग कर अपने कोड में कैसे/कहां हैं। दूसरा काम करना चाहिए। –

+0

भी, क्या आप कहीं भी 'readStream.read()' को कॉल कर रहे हैं? –

+0

"कभी वापस नहीं आता" मेरा मतलब है कि 'एंड' ईवेंट के लिए कॉलबैक कभी निष्पादित नहीं होता है (मुझे कंसोल में लॉग संदेश नहीं दिखाई देता है)। –

उत्तर

5

मैं ऐसी ही कुछ करना ही था और वहाँ इस सवाल का कोई जवाब नहीं है, यहाँ है के बाद से मैं इसे कैसे करते हैं:

// take a cfs file and return a base64 string 
var getBase64Data = function(file, callback) { 
    // callback has the form function (err, res) {} 
    var readStream = file.createReadStream(); 
    var buffer = []; 
    readStream.on('data', function(chunk) { 
    buffer.push(chunk); 
    }); 
    readStream.on('error', function(err) { 
    callback(err, null); 
    }); 
    readStream.on('end', function() { 
    callback(null, buffer.concat()[0].toString('base64')); 
    }); 
}; 

// wrap it to make it sync  
var getBase64DataSync = Meteor.wrapAsync(getBase64Data); 

// get a cfs file 
var file = Files.findOne(); 

// get the base64 string 
var base64str = getBase64DataSync(file); 

// get the buffer from the string 
var buffer = new Buffer(base64str, 'base64') 

आशा है कि यह मदद करेंगे!

+0

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

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