How to pass Multer additional parameter from textfield

Viewed 282

I want to make an image upload and name the image after an input field on the same site.

Here is what I have:

Html Text Input:

<input type="text" id="uri" formControlName="uri" class="input is-normal"
                    (blur)="logValidationErrors()" aria-describedby="heroaddon" (change)="onChange($event)"/>
              </div>

TypeScript:

sensorName = "";

  onChange(event) {
    this.sensorName = event.srcElement.value;
    console.log(this.sensorName);
  }

  public uploader: FileUploader = new FileUploader({
    url: 'http://localhost:3000/image/upload',
    itemAlias: 'image',
    additionalParameter: {
      sensorUri: this.sensorName
    }
  })

and the upload:

var express = require('express');
const multer = require('multer');
const fs = require('fs');
var router = express.Router();

const PATH = './public/images/upload/';

let storage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null, PATH);
    },
    filename: (req, file, cb) => {
        console.log("storage", req.body);
        cb(null, file.originalname)
    }
});

let upload = multer({
    storage: storage
})

router.post('/upload', upload.single('image'), (req, res) => {
    console.log("post", req.headers);
    if (!req.file) {
        console.log("No file is available!");
        return res.send({
            success: false
        });

    } else {
        // fs.renameSync(req.file.path, req.file.path.replace(req.file.originalname,
        //     req.body.sensorname + "." + req.file.originalname.split(".")[1]));
        // console.log('File is available!');
        return res.send({
            success: true
        })
    }
});

router.get('/:name', async (req, res) => {
    res.sendFile('/public/images/upload/' + req.params.name + "." + "jpg", { root: './' })
})

// async function getFileExtension(name) {
//     fs.readdir("./public/images/upload/", (err, files) => {
//         files.forEach(file => {
//             console.log(file.split(".")[0], name, file.split(".")[1]);
//             if (file.split(".")[0] == name) {
//                 return file.split(".")[1];
//             }
//         });
//     });
// }


module.exports = router;

So the idea is to pass additional parameters to the Multer upload and then just name it after that but the additional sensorUriis always an empty string...

Any ideas how to solve this?

0 Answers
Related