微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用nano和multipart函数在CouchDB的名称中添加带有特殊字符的附件

如何解决使用nano和multipart函数在CouchDB的名称中添加带有特殊字符的附件

我有一个express的nodeJS后端应用程序。 我的数据库CouchDB数据库,我使用nano与之通信。

创建文档时,我想向其中添加一些附件。所以我使用了纳米功能

db.multipart.get(docname,[params],[callback])

因此,我创建了一个带有附件的数组:

req.files.forEach((f) => {
    attachments.push({
        name: encodeURI(f.filename),data: fs.readFileSync(f.path),content_type: f.mimetype
    });
});

然后我发送请求:

db.multipart.insert(myDoc,attachments,doc.id)
                .then((result) => {
                    myDoc._rev = result.rev;
                    res.status(201).json({message: 'myDoc saved'});
                })
                .catch(error => {
                    res.status(400).json({ error })
                });

数据库中(在Fauxton上),我有附件:

"_attachments": {
    "file1.pdf": {
      "content_type": "application/pdf","revpos": 2,"digest": "md5-lsochTTIIFKlz9PghGzHLg==","length": 118312,"stub": true
    },"file2.png": {
      "content_type": "image/png","digest": "md5-keuzOCt80kB4fJhtJf0A4w==","length": 472215,"stub": true
    }
  }

我有一个获取文件功能

const readstream = db.attachment.getAsstream(req.params.id,encodeURI(req.params.filename));
readstream.pipe(res);

如果文件名没有特殊字符,则效果很好。但是,如果文件名中有一个特殊字符,例如'é'(即使带有encodeURI函数),我也不会取回该文件我有这个错误

{“错误”:“未找到”,原因:“文档缺少附件”}

而我的附件文件数据库中具有相同的文件名。

如果名称中包含特殊字符,您知道如何取回文件吗?

我认为使用encodeURI函数可以解决该问题,但是无论是否有encodeURI函数,它都是相同的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。