0

我正在尝试使用 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 文件:以 0x2f 0x39 开头)” .

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

4

1 回答 1

2

数据应该是一个缓冲区,而不是 base64 编码的字符串,您可以使用以下结果fs.readFileSync

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

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

于 2014-11-06T20:00:37.927 回答