将图像保存在mongodb中作为blob,React

时间:2016-12-01 10:13:12

标签: javascript image mongodb reactjs meteor

我使用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中的图像?

我正在使用流星框架,如果这是一个重要的信息。

3 个答案:

答案 0 :(得分:2)

我迟到了派对,但你没有将图像保存为blob,而是可以对其进行base64编码,然后将该字符串作为纯文本存储在数据库中。

我在过去的项目中完成了这项工作,存储字符串比在mongoDB中存储/检索二进制数据更容易。

缺点是Base64编码的二进制文件占用的空间比原始二进制文件多37%。

Wikipedia article about Base64

答案 1 :(得分:1)

您应该将文件发送到服务器的REST端点,并且应该从服务器将图像发送到您的数据库(在本例中为MongoDB)。

Take a look at this example

答案 2 :(得分:1)

我使用名为vsivsi的文件包:file-collection在Mongo中存储文件/图像。

https://atmospherejs.com/vsivsi/file-collection

它包含有关如何在griefs集合中将文件保存到数据库的示例应用程序。