Получение изображений, хранящихся в mongodb

Я пытался восстановить изображения, которые я загрузил и сохранил в mongodb, но я не могу получить изображение обратно из БД. Кажется, что есть много информации о загрузке файлов, но не так много информации о получении загруженных изображений из БД.

Буду очень признателен за вашу помощь. Заранее спасибо.

Это часть того, что сохраняется в mongodb:

{
    "_id": {
        "$oid": "58f2e56fd8ca891e02fc85db"
    },
    "path": "uploads/1492313455338_codi.jpg",
    "filename": "1492313455338_codi.jpg",
    "__v": 0,
    "article": {
        "$oid": "58f2e56fd8ca891e02fc85dc"
    }
}

Схема:

var mongoose = require('mongoose');

var ImageSchema = new mongoose.Schema({
  img: { data: Buffer, contentType: String }
});

module.exports = mongoose.model('Image', ImageSchema);

router.js

router.post('/blog/article/addPost', upload.single('image'), function(req, res, err) {
  var image = new Image ({
    path: req.file.path,
    filename: req.file.filename
  });
    image.save(function(err, image) {
          //other code
        });
});

Часть EJS для загрузки файла

<form action="/blog/article/addPost" method="post" enctype="multipart/form-data">
        <div class="form-group">
          <label="name">Add a picture for your article</label>
          <input id="upload-input" type="file" class="form-control" name="image"/>
        </div>
</form>

EJS, чтобы получить файл:

<div class="col-md-4">
        <form method="GET" action="/blog/article/<%= image.id %>">
          <img src="<%= image.path %>" style="width:304px;height:228px;">
        </form>
</div>

многоканальная конфигурация:

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, './public/uploads/')
  },
  filename: function (req, file, cb) {
    if (!file.originalname.match(/\.(png|jpeg|jpg|wav|tif|gif)$/)) {
      var err = new Error();
      err.code = 'filetype';
      return cb(err);
    } else {
      cb(null, Date.now() + "_" + file.originalname);
    }

  }
});

2 ответа

Решение

Мне пришлось убрать "public" с пути. Эта ссылка помогла мне решить проблему

Я никогда не использовал multer, поэтому я не уверен, как провести вас через это.

Тем не менее, я использую грозный для загрузки изображений, и что я сделал, я создал общую папку для своих изображений, и каждый раз, когда я загружаю изображение, я сохраняю путь сохранения в моей БД, таким образом, вы можете получить прямой доступ к директории и реализовать это в вашем файле ejs.

Надеюсь, мой ответ был актуален.

Удачи

Другие вопросы по тегам