我尝试使用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作为编码值,我不知道还能做什么。
答案 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。