使用摇篮getAttachment从CouchDB获取二进制文件



我上传了一个png作为附件到CouchDb数据库。当我通过Futon看到它时,它是好的,如果我试图通过摇篮把它拿回来,它就损坏了。我使用了grade附带的grade -test.js中的一个片段,并对其进行了一些修改:

      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/

您找到的代码片段用于文本文档(=基本上是字符串)。对于二进制数据(例如图像),您必须在响应对象上设置正确的编码:

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();
});

最新更新