简体   繁体   中英

Image upload isn't working using multer

I setup multer like this

let multer = require('multer');

let apiRoutes = express.Router();
let UPLOAD_PATH = '../uploads';

let storage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null, UPLOAD_PATH);
    },
    filename: (req, file, cb) => {
        cb(null, file.fieldname + '-' + Date.now());
    }
});

let upload = multer({ storage: storage });

and in route I am getting data and an image and use multer like!

   apiRoutes.post('/update', passport.authenticate('jwt', { session: false }), (request, response) => {

    let record = {
        name: request.body.name,
        location: request.body.location,
        about: request.body.about,
        userid: request.body.userid,
        avatar: request.body.filename
    };

    let userData = {
        name: request.body.name
    };

    if (request.body.filename) {
        upload(request, response, (error) => {
        });
    }

    profile.findOneAndUpdate({ userid: request.body.userid }, record, {new: true}, (error, doc) => {
        if (error) response.json(error);

        user.findOneAndUpdate({ _id: request.body.userid }, record, (error, result) => {
            if (error) throw error;

            response.json(doc);
        });
    });
});

What is happening with this code is that when I do not send an image to backend then I get data from front end and store it into database. But when I send image along side data then it return POST /api/1.0/profile/update 401 0.396 ms - - .

It means I am not getting any data at all. Whats wring with the code here?

You can't use Multer in your /update route. Use Multer in your router like this:

var upload = multer({ dest: 'uploads/' })
apiRoutes.post('/profile', upload.single('image'), function (req, res, next) {
  // Uploaaded

})

if you add it and still can't get our file, you should update your form with this parameter: enctype="multipart/form-data"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM