Я создал сервер. js, где я могу загрузить любой файл в mongodb, но я просто хочу изменить его так, чтобы я мог загружать только файл изображения, загрузка любого другого файла выдает ошибку. Может кто-нибудь подсказать мне, что может сделать, но использование библиотеки mon goose обязательно. Я отредактировал код с предложенным предложением.
server. js ::
const express = require('express');
const bodyParser = require('body-parser');
const path= require('path');
const crypto = require('crypto');
const mongoose = require('mongoose');
const multer = require('multer');
const GridFsStorage = require('multer-gridfs-storage');
const Grid= require('gridfs-stream');
const methodOverride = require('method-override');
const fileFilter = (req,file,cb) => {
var filetypes = /jpeg|jpg/;
var mimetype = filetypes.test(file.mimetype);
var extname =
filetypes.test(path.extname(file.originamname).toLowerCase());
if (mimetype && extname) {
return cb(null,true);
}
cb("Error:file upload only supports the following filetype-"
+filetypes);
}
const app = express();
//Middleware
app.use(bodyParser.json());
app.use(methodOverride('_method'));
app.set('view engine', 'ejs');
//MOngo URI
const mongoURI = 'mongodb://localhost:27017/server_files_db';
//create mongo connection
const conn = mongoose.createConnection(mongoURI);
//Init gfs
let gfs;
conn.once('open', () => {
//initialize stream
gfs = Grid(conn.db, mongoose.mongo);
gfs.collection('uploads');
})
//create storage engine
const storage = new GridFsStorage({
url: mongoURI,
file: (req, file) => {
return new Promise((resolve, reject) => {
crypto.randomBytes(16, (err, buf) => {
if (err) {
return reject(err);
}
const filename = buf.toString('hex') +
path.extname(file.originalname);
const fileInfo = {
filename: filename,
bucketName: 'uploads'
};
resolve(fileInfo);
});
});
}
});
const upload = multer({ storage: storage, fileFilter: fileFilter });
//Route GET
//@dest uploads file to DB
app.get('/',(req,res)=>{
res.render('index');
});
//@route POST /upload
//@dest uploads file to DB
app.post('/upload', upload.single('file'), (req,res) => {
// res.json({file: req.file});
res.redirect('/');
});
const port = 5000;
app.listen(port, () => console.log(`server started on port ${port}`));