couchdb / nano multipart插入

时间:2014-11-04 16:17:33

标签: javascript node.js couchdb couchdb-nano

我尝试使用nano插入带有多个图像附件的文档。以下测试用例运行没有失败:

var dbName = 'testdb';
var encoding = 'base64';

var fs = require('fs');
var nano = require('nano')('http://localhost:5984');

nano.db.create(dbName);
var db = nano.use(dbName);

var attach1 = {
  name: 'image_1', 
  data: fs.readFileSync('test_image.jpg').toString(encoding),
  content_type: 'image/jpeg'
};

var attach2 = {
  name: 'image_2',
  data: fs.readFileSync('test_image_2.jpg').toString(encoding),
  content_type: 'image/jpeg'
};

var doc = {
  _id: 'test_id',
  html:  fs.readFileSync('test_html.html').toString()
};

db.multipart.insert(doc, [attach1, attach2], doc._id, function(err){
  if (err)
    console.log('failed: ' + err);
  else
    console.log('succeeded');
});

然而,当我尝试使用蒲团观看图像时,它们似乎已经坏了,如果我下载图像并尝试打开它们,我告诉"错误解释JPEG图像文件(不是JPEG file:以0x2f开头0x39)"。

文件的大小大致正确(服务器上稍大一些,但不是很多),所以我猜测有一些格式化错误。也就是说,我已经尝试使用二进制和utf8作为编码值,我不知道还能做什么。

1 个答案:

答案 0 :(得分:2)

数据应该是Buffer,而不是base64编码的字符串,您只需使用fs.readFileSync的结果:

var attach1 = {
  name: 'image_1', 
  data: fs.readFileSync('test_image.jpg').toString(encoding),
  content_type: 'image/pjpeg'
};

请注意,在多部分插入中使用字符串时,高达5.11.2的nano存在unicode字符错误,请参阅https://github.com/dscape/nano/pull/225