使用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 (将#修改为@)