Search code examples
node.jsexpressmulter

Multer Doesn't Save Images on Disk In Any Way


It simply doesn't save anything to the destination folder i specified.

i tried {storage:storage} instead of {dest: 'storage/'} but it didn't work either. the image data is actually sent to the server as its console logged. and the dest i specified is created by default but remain empty.

const express = require('express');
const app = express();
const multer = require('multer');
    let storage = multer.diskStorage({
        destination: '/public/my-uploads',
          filename: function (req, file, cb) {
            cb(null, file.fieldname + '-' + Date.now())
          }
    });

const upload = multer({dest:'storage/'}).single('file');


app.post('/upload', upload, (req , res) => {
  console.log(req.files) // this does log the uploaded image data.
})


***** EDIT ******

HTML

        <form  onSubmit={this.upload} enctype='multipart/form-data'>
          <input type='file' name='image' />
          <input type='submit' value='upload' />
        </form>

JS

  upload(e){
    e.preventDefault();
    const file = e.target[0].files[0];
    console.log(file)
    const fm = new FormData();

    fm.append('file', file);
    console.log(fm)
    axios.post('/upload', fm);
  }

POSTMAN

enter image description here


Solution

  • It's been a while, the issue was that I wasn't using the multer middleware at all so the callback code for handling the image was never executed. I didn't know much about how express worked back then.