首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从multer-GridFs-storage和mongoose检索图像

从multer-GridFs-storage和mongoose检索图像
EN

Stack Overflow用户
提问于 2021-10-16 15:14:04
回答 1查看 118关注 0票数 0

我一直在使用multer-gridfs-storage显示我上传到mongodb的图像。

问题是,我应该在每个块中包含二进制数据,我希望将它们连接起来,生成最终文件并将其编码为base64

mongodb说它是二进制数据,但我不太确定mongodb chunks

下面是我的代码:

multer.js:

代码语言:javascript
复制
const multer = require("multer");
const { GridFsStorage } = require("multer-gridfs-storage");
const db = require("../utils/database").db;


const storage = new GridFsStorage({ db });

module.exports = {
  upload: multer({
    storage: storage,
  })
};

我的重组文件的函数:

代码语言:javascript
复制
const getImage = (fileName) => {
  return files
    .find({ filename: fileName })
    .then((file) => {
      const id = mongoose.Types.ObjectId(file[0]._id);
      return chunks
        .find({ files_id: id })
        .then((chunks) => {
          if (!chunks || chunks.length === 0) {
            console.log("No data found");
          }
          let fileData = [];
          for (let i = 0; i < chunks.length; i++) {
            //This is in Binary JSON or BSON format, which is stored
            //in fileData array in base64 endocoded string format
            fileData.push(chunks[i].data.toString('base64');
          }

          //Display the chunks using the data URI format
          return (finalFile =
            "data:" + file[0].contentType + ";base64," + fileData.join(""));
        })
        .catch((err) => {
          console.log(err);
        });
    })
    .catch((err) => {
      console.log(err);
    });
};

我用.toString('base64')得到了这样的结果

代码语言:javascript
复制
���R3\x17�\x18��bC4%\x19�rS5&?��cDT6\'7\x1A�s�E���dUte�89\x11\x00\x02\x01\x02\x04\x03\x05\x07\x02\x04\x04\x05\x02\x03\x01\x11\x00\x01\x02\x11\x03!1\x12\x04AQ\x05aq"\x13\x06������2�\x07�B#\x14�R3\x15br$4\b�\x16���C%�S\x17D5&�c��s�Td6\t��\x00\f\x03\x01\x00\x02\x

并且没有.toString('base64')

代码语言:javascript
复制
77+977+977+9DR7vv70D0IJO77+9NSVq0qEu77+9I++/vRl477+9D++/vS3vv70GUE7vv71H77+977+9UO+/vS8eKO+/vVLvv73vv73vv73vv73vv70d77+9XO+/vXjvv71t77+977+9f++/vW3vv73vv73vv73vv71Q77+977+9Nu+/vSVD77+977+977+9FXnvv70277+9d++/vRE3Zu+/vQcgST1P77+92orVle+/vX5lIu+/vVPvv70o77+9Cu+/ve+/vTvvv73bnu+/vR3vv70a77+9VEZqTu+/vXkR77+977+9cyjvv73vv70kVT/vv73vv73vv70Hbe+/vW3vv73oiJzvv71FeGtS77+9Xu+/ve+/vT9xWcSGAO+/ve+/ve+/ve+/ve+/vX3vv73vv73vv73vv73vv71zSsKcVF5VOw7vv73vv73vv71M77+9CGPvv73Mo++/ve+/vWDvv712Ie+/ve+/vXbvv71g77+9S++/ve+/vWJRWNGU77+977+9GSw5AO+/vRIzdu+/ve+/vQkb77+9Se+/vTrvv70277+977+977+977+977+977+9RVVn77

感谢您的帮助!

EN

回答 1

Stack Overflow用户

发布于 2021-10-17 10:02:23

好吧,我知道问题出在哪里了,

在我的模型chunks.js中

代码语言:javascript
复制
const mongoose = require("mongoose");

const Schema = mongoose.Schema;

const chunks = new Schema({
  files_id: {
    type: mongoose.Schema.Types.ObjectId,
  },
  n: {
    type: Number,
  },
  data: {
    type: String,
  },
});

module.exports = mongoose.model("fs.chunks", chunks);

我的数据类型是“String”而不是"Buffer“

它就像预期的那样工作

代码语言:javascript
复制
const mongoose = require("mongoose");

const Schema = mongoose.Schema;

const chunks = new Schema({
  files_id: {
    type: mongoose.Schema.Types.ObjectId,
  },
  n: {
    type: Number,
  },
  data: {
    type: Buffer,
  },
});

module.exports = mongoose.model("fs.chunks", chunks);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69596883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档