当前位置: 首页 > 知识库问答 >
问题:

MongoDB:存储的base64缓冲区数据与检索的base64不匹配

宦烈
2023-03-14

我使用Mongoose将小尺寸的base64编码图像(每个大约100-200k)直接发布到mongodb中。在存储之前,我可以看到内容与从客户端发送的内容相同。但是查询的base64字符串和输入的不一样?你知道我错过了什么吗?

    // process the add image request
app.post('/addimage', function(req, res) {
    console.log("Addimage post....");
    var qry = {'_email' : req.user.local.email, 'date' : req.body.date, 'subject' : req.body.subject };
    Item.findOne(qry, function(err, item) {
         if (err) {
             console.log('Find images failed: ' + err);
             var resp = '{"result" : "failed", "msg" : ' + err + ', "_req" : "addimage"}';
             res.send(resp);
         } else {
             if (item == null) { // item doesn't exist, create now
                 var item = new Item();
                 item._email = req.body._email;
                 item.date = req.body.date;
                 item.subject = req.body.subject;
             }

             // add image
             var image = new Image();
             image.timestamp = req.body.timestamp;
             image.contentType = req.body.contentType;
             var imgBuf = new Buffer(req.body.image, 'base64');
             image.image = imgBuf;
             item.images.push(image);

             item.save(function(err, result) {
                 if (err) {
                     console.log('Find images failed: ' + err);
                     var resp = '{"result" : "failed", "msg" : ' + err + ', "_req" : "addimage"}';
                     res.send(resp);
                 } else {
                     res.send('{"result" : "ok", _req: "addimage"}');
                     console.log("Image saved and responded to ...");
                 }
             });
         }
    });
});

存储在req.body.image中的数据字符串以“/9j/4AAQSKZJ...”开头,但从mongo shell中我看到了不同。是Bindata的子类型0造成的吗?

> db.items.find({subject:"Science"},{'images.image':1})
var imageSchema = new mongoose.Schema({
    timestamp   : String,
    contentType : String,
    image       : Buffer,
}, { strict: true });
imageSchema.index({ timestamp: 1}, { unique: true });

var itemSchema = new mongoose.Schema({
_email     : {
                type: String,
                required: true,
            },
date       : {
                type: String,
                required: true,
            },
subject    : {   
                type: String,
                required: true,
            },   
images     : [imageSchema],
}, { strict: false });
itemSchema.index({ _email: 1, date: 1, subject: 1}, { unique: true });

谢了!

共有1个答案

有凯泽
2023-03-14

它是节点版本;(恢复到0.10.33解决了这个问题!

 类似资料:
  • 我有一个Base64编码的字符串(这是AES加密的字符串)。我正试图将它存储在Firebase存储,然后从它下载。 我尝试过多种选择,例如 这不会在存储中保留base64字符串,而是将其转换为整数。我还尝试提供{contenttype:“application/base64”},但是putString似乎不起作用。 我只是在寻找一个非常简单的base64编码字符串到firebase存储的上传和下载

  • 我正在使用Google Protocol Buffers向服务器发送消息。我对如何发送图像与如何接收图像感到困惑。有关详细信息,请参阅下面的代码,但我的问题是: 我需要base64_decode从未经过base64编码的返回字符串吗,因为它是使用char*和size发送的?也许Google Protocol Buffers处理了这个问题,但我在生成的类中找不到任何证据。 我可能在这里找到了答案,但

  • 我有一个二进制数据缓冲区,我想存储在协议缓冲区中。 在留档(https://developers.google.com/protocol-buffers/docs/proto#scalar)中,它说类型等价于C中的。我无法相信这一点,所以我不得不尝试它,是的,这似乎是这样... 本协议: 给出一个包含以下内容的消息定义: 公共setter/getter API如下所示: 当然,这不是在消息中存储二

  • 我有很多PDF文件,我需要得到它的内容编码使用Base64。我有一个Akka应用程序,它以流的形式获取文件,并分发给许多工人来编码这些文件,并为每个文件返回字符串base64。我得到了一个编码的基本解决方案: 它工作,但我想知道什么将是最好的方式,我可以使用缓冲区编码文件,如果有一个更快的替代这一点。 我测试了一些其他方法,例如: null 任何投入都是很有帮助的。谢谢你!

  • 问题内容: 我们有一个MySQL InnoDB表,其中包含约10列由base64编码的小型javascript文件和由base64编码的png(小于2KB大小)图像。 插入的次数很少,但读取次数却很多,但是输出会在Memcached实例上缓存几分钟,以避免后续的读取。 现在,我们正在使用这些列,但是我想知道在性能或快照备份方面切换到数据类型是否有优势。 我的搜索挖掘表明,和我的情况接近相同的,因为

  • 问题内容: 我有一些大型的base64编码数据(存储在hadoop文件系统中的快照文件中)。该数据最初是压缩的文本数据。我需要能够读取此编码数据的大块,对其进行解码,然后将其刷新到GZIPOutputStream。 关于如何执行此操作而不是将整个base64数据加载到数组中并调用Base64.decodeBase64(byte [])的任何想法? 如果我读了直到’\ r \ n’分隔符并逐行解码的