node.js - 如何将图像插入 CouchDB

标签 node.js couchdb node-modules

我正在尝试弄清楚如何使用此处找到的 Node CouchDB 库将图像插入到 CouchDB 中:https://www.npmjs.com/package/node-couchdb

这是我所做的:

fs.readFile('download.jpeg', (err, data) => {
        binary_data = new Buffer(data, 'binary');
        couch.insertAttachment("node_db", doc_number, "download.jpeg", binary_data, rev_number).then(({data, headers, status}) => {

        }, err => {
            console.log("ERROR"+ err.code);
        });
});

结果是 CouchDB 以文档格式存储它,如下所示:

{
  "_id": "2741d6f37d61d6bbdf63df3be5000504",
  "_rev": "22-bfdbe6db35c7d9873a2cc8a38afb2833",
  "_attachments": {
    "attachment": {
      "content_type": "application/json",
      "revpos": 22,
      "digest": "md5-on0A+d7045WPI6FyS1ut4g==",
      "length": 22482,
      "stub": true
    }
  }
}

//This is what the data looks like in CouchDB using the View Attachment Function through the interface:

{"type":"Buffer","data":[255,216,255,224,0,16,74,70,73,70,0,1,1,0,0,1,0,1,0,0,255,219,0,132,0,9,6,7,18,18,18,21,18,19,19,22,21,21,23,23,23,24,21,21,21,23,23,21,21,24,21,21,21,23,22,22,21,21,22,24,29,40,32,24,26,37,29,21,21,33,49,33,37,41,43,46,46,46,23,31,51,56,51,45,55,40,45,46,43,1,10,10,10,14,13,14,26,16,16,26,45,37,29,37,45,45,45,45,45,45,45,241,...]

然后我尝试将请求 header 中的 Content-Type 属性更改为“image/jpeg”,结果是:

{
  "_id": "2741d6f37d61d6bbdf63df3be5000504",
  "_rev": "23-cf8c2076b43082fdfe605cad68ef2355",
  "_attachments": {
    "attachment": {
      "content_type": "image/jpeg",
      "revpos": 23,
      "digest": "md5-SaekQP37DCCeGX2M8UVeGQ==",
      "length": 22482,
      "stub": true
    }
  }
}

但是,这仍然会导致无法从 CouchDB 界面查看图像(单击“查看附件”)。在本例中,图像的大小只有 6,904 字节,但存储的长度约为 22k(夸大了 CouchDB 中的大小),因此我假设我没有将图像的正确表示形式(编码)传递给 CouchDB。

最佳答案

您可以将图像数据编码为 base64 字符串并保存它,尽管我根本不推荐它。我要做的是将文件上传到对象存储(例如 AWS S3 或其开源替代方案 MinIO),然后在数据库中保存对该文件的引用(例如图像 URL)。

PS:我很抱歉我的答案中缺少链接和引用资料,我是在手机上写的。我一回到家就可以对其进行编辑并添加引用资料。

关于node.js - 如何将图像插入 CouchDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59075101/

相关文章:

couchdb - 如何从 CouchDB 复制到 PouchDB?

node.js - 在任意空闲端口启动 Node http服务器

node.js - Socket.io xdomain https flashsockets

node.js - 如何使用 Node.js 确定当前的操作系统

java - 为什么在 MongoDB 或 CouchDB 中使用 Javascript 而不是 Java、C++ 等其他语言?

javascript - 模块中的函数是否可以导出到另一个模块中?

node-modules - eslint错误无法读取null的属性 'range'

android - 退出 Expo 后无法运行 React Native 应用程序

javascript - 如何在 Node js 中使用异步和等待从数据库中选择

binding - 如何从 .framework 创建 MonoTouch 绑定(bind)