Хранить изображение в пн go дБ с помощью мангуста - PullRequest
0 голосов
/ 21 января 2020

Вместо того, чтобы хранить файл непосредственно в mongodb, я хочу хранить его, используя библиотеку mon goose. Как использовать библиотеку mon goose с тем же фреймом кода?

Обновление :: Сохранено в библиотеке mon goose. Теперь он загружает весь файл, но как я могу сохранить только файл DOCX вместо файла изображения. И при загрузке любого другого файла должен быть указан неверный файл.

update 2 :: Устранена проблема. Теперь можно только разрешить файл docxx. Теперь необходимо добавить имя файла с расширением, как указано в разделе комментариев. Как использовать эту часть кода.

Middleware :: upload. js

const util = require("util");
const multer = require("multer");
const GridFsStorage = require("multer-gridfs-storage");
const mongoose = require('mongoose');
const Grid = require('gridfs-stream');

const mongoURI ='mongodb://localhost:27017/file_uploaded';
const promise = mongoose.connect(mongoURI, { useNewUrlParser: true });
const conn = mongoose.connection;
let gfs;

conn.once('open',() => {
  gfs = Grid(conn, mongoose.mongo);
  gfs.collection('uploads');
});


var storage = new GridFsStorage({
  db: promise,
  options: { useNewUrlParser: true, useUnifiedTopology: true },
  file: (req, file) => {
return new Promise((resolve, reject) => {
            if (file.mimetype === 'application/vnd.openxmlformats- 
  officedocument.wordprocessingml.document') {
                resolve({
                    bucketName: 'words'
                })
                ***//Add filename inorder to maintain original final name with 
extention***
                //const filename = `${Date.now()}- 
   bezkoder-${file.originalname}`;
                //return filename;
            } else {
                reject(Error("File type has been rejected"));
            }
        });   
  }
});

var uploadFile = multer({ storage: storage }).single("file");
var uploadFilesMiddleware = util.promisify(uploadFile);
module.exports = uploadFilesMiddleware;

1 Ответ

0 голосов
/ 21 января 2020

Вам не нужно использовать GridFsStorage. Попробуйте код ниже.

// file-controller.js

const express = require('express');
const mongoose = require('mongoose');
const multer = require('multer');

const router = express.Router();

const multerStorage = multer.memoryStorage();
const upload = multer({ storage: multerStorage, });

const imageSchema = mongoose.Schema({
    image: { data: Buffer, contentType: String },
}, { timestamps: true });

const ImageModel = mongoose.model('images', imageSchema);

router.post('/upload', upload.single('image'), async (req, res, next) => {
    const image = { data: new Buffer.from(req.file.buffer, 'base64'), contentType: req.file.mimetype }
    const savedImage = await ImageModel.create(image);
    res.send(savedImage);
});

router.get('/getImage/:id', async (req, res, next) => {
    const { id: _id } = req.params;
    // If you dont use lean(), you wont decode image as base64
    const image = await ImageModel.findOne({ _id }).lean().exec();
    res.send(image);
});

module.exports = router;

Подать маршрут через express.

const express = require('express');
const FileController = require('./file-controller');
const app = express();

// Mongo DB connection code ...
// Serve static files code ...

app.use('/file', FileController);

app.listen(3000, () => console.log(`Example app listening on port ${port}!`));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...