我使用dropzone-react组件上传图片。上传后,它会给我blob:http://test
地址,如果我打开它,我可以看到我上传的图片。
我现在面临的挑战是,我希望将此图像作为blob类型保存到MongoDB中。
这是我选择要上传的图片后调用的当前代码。文件[0] .preview显示正确的URL。另外console.log(blob)
在控制台中显示blob(但是我找不到数据部分,也许这就是问题?
onFileDrop(files) {
var xhr = new XMLHttpRequest();
console.log(files[0].preview);
xhr.open('GET', files[0].preview, true);
xhr.responseType = 'blob';
xhr.onload = function(e) {
if (this.status == 200) {
var blob = xhr.response;
console.log(blob);
Database.update({_id : _stateId}, { $push : {picture : blob}});
}
};
xhr.send();
但在更新数据库之后,MongoDB中的图片元素只是空的。我尝试保存xhr.response.type并且这可行,但我不得不访问数据以将其存储在MongoDB中并将其作为代码中的另一行上的图片检索。
我是否错过了一些关键步骤,或者是否有更简单的方法通过使用react来保存mongoDB中的图像?
我正在使用流星框架,如果这是一个重要的信息。
答案 0 :(得分:2)
我迟到了派对,但你没有将图像保存为blob,而是可以对其进行base64编码,然后将该字符串作为纯文本存储在数据库中。
我在过去的项目中完成了这项工作,存储字符串比在mongoDB中存储/检索二进制数据更容易。
缺点是Base64编码的二进制文件占用的空间比原始二进制文件多37%。
答案 1 :(得分:1)
您应该将文件发送到服务器的REST端点,并且应该从服务器将图像发送到您的数据库(在本例中为MongoDB)。
答案 2 :(得分:1)
我使用名为vsivsi的文件包:file-collection在Mongo中存储文件/图像。
https://atmospherejs.com/vsivsi/file-collection
它包含有关如何在griefs集合中将文件保存到数据库的示例应用程序。