Как мне получить двоичное поле из существующего mongo db документа?
На консоли MongoDB, если я делаю поиск для выбранной записи, я получаю это:
{_id:ObjectId("1234"),"cover_data" : BinData(2,"ozkAAP/Y/+AAEEpGSUYAAQEBAJYAlgAA/+IFpElDQ19QUk9GSUxFAAEBAAAFlGFwcGwCIAAAbW50clJHQiBYWVogB9kAAgAZAAsAGgALYWNzcEFQUEwAAAAAYXBwbAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAA ..... )
В python на нашем веб-сервере, когда мы делаем поиск с помощью pymongo, он получает этоПоле как двоичный файл и json_pickle, кажется, автоматически переключают его в base64, и, увы, изображение выглядит великолепно при отправке обратно клиенту.Когда я сравниваю сгенерированный base64 с драйвером mongo для node.js, он совершенно другой и не отображает изображение должным образом.
Вот код для Node.JS:
cb = function(comp) {
thumb_buffer = new Buffer(comp.thumbnail_data.value(),'binary');
comp.thumbnail_data = thumb_buffer.toString('base64');
}
В примерах и тестах здесь: https://github.com/christkv/node-mongodb-native Я не вижу ни одного примера того, что я пытаюсь сделать.Кажется, существуют десериализаторы BSON и BinaryParser, который используется в случае целого объекта BSON.Я попробовал это только для одного поля и получил ошибки сегментации.
Рабочий список вещей, которые я пробовал:
mongo_compositions.find {_id:{$in:ids}},{},(err,compositions) ->
for comp in compositions
do(comp) =>
thumb_buffer = comp.thumbnail_data.value(true)
test_buffer = Binary(thumb_buffer)
console.log test_buffer
console.log test_buffer.toString('base64')
#thumb_buffer = BSON.deserialize thumb_buffer
#thumb_buffer.write(comp.thumbnail_data.value(true))
#comp.thumbnail_data = thumb_buffer.toString('base64')
#cover_buffer = new Buffer(comp.cover_data.value(),'binary')
#console.log thumb_buffer.toString('base64')
#console.log "#{comp.composition_author} - #{comp.thumbnail_data.length}"
#comp.cover_data = cover_buffer.toString('base64')