Javascript 返回错误的图像附件类型

Javascript 返回错误的图像附件类型,javascript,electron,blob,pouchdb,Javascript,Electron,Blob,Pouchdb,我正试图让PockDB返回一个小的图像附件。当我通过Fauxton上传图像时,我的应用程序成功返回一个Blob,类型为:'image/svg+xml',它在我的元素中正确呈现(使用URL.createObjectURL) 但是,如果我让用户上传一个图像,然后将文件Blob放入我的远程邮袋数据库,我就会遇到问题。在本例中,PockDB.getAttachment()现在返回类型为“应用程序/八位字节流”的Blob,而不是“图像/svg+xml”,尽管上载的内容类型正确。此图像不渲染,这给了我一个通

我正试图让PockDB返回一个小的图像附件。当我通过Fauxton上传图像时,我的应用程序成功返回一个Blob,类型为:'image/svg+xml',它在我的
元素中正确呈现(使用
URL.createObjectURL

但是,如果我让用户上传一个图像,然后将文件Blob放入我的远程邮袋数据库,我就会遇到问题。在本例中,
PockDB.getAttachment()
现在返回类型为“应用程序/八位字节流”的Blob,而不是
“图像/svg+xml”
,尽管上载的内容类型正确。此图像不渲染,这给了我一个通用浏览器img占位符

为什么会发生这种情况

步骤1以下是我如何从用户检索图像:

var image = new Blob([fs.readFileSync(fileLocation, 'utf-8')], {
   type: 'image/svg+xml'
})
步骤2以下是我如何将我的文档(和附件)放入数据库:

var doc = await PouchDB.get(docID, {attachments: true})
doc._attachments = {
    'logo.svg': {
        content_type: 'image/svg+xml',
        data: image
    }
}
await PouchDB.put(doc)

您在读取文件时遇到了两个问题。首先,您不能将二进制数据视为UTF8(SVG文件可能不是真正的问题,但其他图像肯定是),第二个问题是您必须对其进行base64编码

base64编码blob有许多不同的方法,但最简单的解决方案是将其放置方法从
put
更改为
putAttachment
。大概是这样的:

HTML:


你是如何把你的附件放到数据库的?谢谢,我已经更新了帖子来回答这个问题。非常感谢你的回复。现在由于某种原因,我在使用
putAttachment
而不是标准的
put()
时遇到了更新冲突。有什么想法吗?我想你需要更改文档。\u rev更新时<代码>db.putAttachment('mydoc','myfile',版本号,文件,文件类型)
...
<input type="file" id="inputFile">
...
...
var inputFile = document.querySelector('#inputFile');
var file = inputFile.files[0];
db.putAttachment('mydoc', 'myfile', file, file.type).then(...)
...