仅想上传jpeg / png文件

问题描述 投票:1回答:1

我已经创建了一个server.js,可以在其中将任何文件上传到mongodb,但我只想进行修改,使我只能上传图像文件,而上传其他任何文件都会出错。有人可以建议我做什么,但是必须使用猫鼬图书馆。

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 app = express();
//Middleware

app.use(bodyParser.json());
app.set('view engine', 'ejs');
//MOngo URI
const mongoURI = 'mongodb://localhost:27017/upload_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 });
//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}`));
node.js mongodb express mongoose
1个回答
0
投票

您可以将fileFilter与特定扩展名一起使用,例如

const path = require('path');

multer({
  fileFilter: function (req, file, cb) {

    var filetypes = /jpeg|jpg/;
    var mimetype = filetypes.test(file.mimetype);
    var extname = filetypes.test(path.extname(file.originalname).toLowerCase());

    if (mimetype && extname) {
      return cb(null, true);
    }
    cb("Error: File upload only supports the following filetypes - " + filetypes);
  }
});
© www.soinside.com 2019 - 2024. All rights reserved.