使用nano将二进制附件插入CouchDB

时间:2013-10-27 19:17:26

标签: node.js couchdb couchdb-nano

我正在尝试使用nano向CouchDB插入二进制附件。我在data返回的http.request中有一个JPG。

我用nano保存,如下所示

db.attachment.insert( id, 'content', self._data, contentType, {rev: rev}, function(err, body) { 
        callback();
});

但是当我尝试通过网络浏览器查看它时图像被破坏了。

该文件中包含UTF-8转义字符,当我用CURL拉出它时可见:

$ curl http://127.0.0.1:5984/web-crawler/doc-test.jpg/content
"ÿØÿà\u0000\u0010JFIF\u0000\u0001\u0001\u0001\u0000H\u0000H\u0000\u0000ÿâ\fXICC_PROFILE\u0000\u0001\u0001\u0000\u0000\fHLino\u0002\u0010\u0000\u0000mntrRGB XYZ \u0007Î\u0000\u0002\u0000\t\u0000\u0006\u00001\u0000\u0000acspMSFT\u0000\u0000\u0000\u0000IEC sRGB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000öÖ\u0000\u0001\u0000\u0000\u0000\u0000Ó-HP  \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\

内容未损坏,因为如果我将其保存到文件中,我可以看到图像。

var fs = require('fs');
fs.writeFile('logo.jpg', data, 'binary', function(err){
  if (err) throw err
  console.log('File saved.')
});

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

好的,这个问题可以很接近。我的问题的答案是Buffer:

db.attachment.insert( id, 'content', new Buffer(self._data, "binary"), contentType, {rev: rev}, function(err, body) { 
        callback();
});