我上传了一个png作为CouchDb数据库的附件。当我通过Futon看它时,它很好,如果我试图通过摇篮将它取回它就会被破坏。我用crade-test.js中的一个snipptlet和crade一起修改了一下:
var response = {};
var streamer = db.getAttachment(data.id,filename);
streamer.addListener('response', function (res) {
response.headers = res.headers;
response.headers.status = res.statusCode;
response.body = "";
});
streamer.addListener('data', function (chunk) { response.body += chunk; });
streamer.addListener('end', function () {
fs.writeFile('new-'+filename, response.body, function (err) {
if (err) throw err;
console.log('It\'s saved!');
});
});
结果是损坏的png大于输入。我在这里提供了一个工作示例:http://jsfiddle.net/x8GZc/
答案 0 :(得分:1)
您找到的代码段与文本文档一起使用(=基本上是一个字符串)。 对于二进制数据(例如图像),必须在响应对象上设置正确的编码:
stream = client.database('images').getAttachment(req.params.id, filename);
// response is your HTTP response object
stream.on('data', function(chunk) {
return response.write(chunk, "binary");
});
stream.on('end', function() {
return response.end();
});