使用Multer和Express上传图像

upload image with multer and express

本文关键字:图像 Express Multer 使用      更新时间:2023-09-26

我正在尝试上传带有multer和express的照片,一切都很好。但是当我想使用 fs 库动态创建目录时,我需要在 multer.diskStorage() 函数中访问目标中的req.body.name

这可能吗?

这是我的代码:

var storage =   multer.diskStorage({
    destination: function (req, file, callback) {
        callback(null, './public/products');
    },
    filename: function (req, file, callback) {
        if (file.mimetype === 'image/jpg') {
            callback(null, file.fieldname + '-' + Date.now() + ".jpg");
        }
        else if (file.mimetype === 'image/jpeg' ) {
            callback(null, file.fieldname + '-' + Date.now() + ".jpeg");
        }
        else if (file.mimetype === 'image/png') {
            callback(null, file.fieldname + '-' + Date.now() + ".png");
        }
        else if(file.mimetype !== 'image/jpg' || file.mimetype !== 'image/jpeg' || file.mimetype !== 'image/png' ){
            return false;
        }
    }
});
var Create_products = multer({ storage : storage , limits: {files:1 }}).single('PRODUCT_PHOTO');

错不错?

我个人在前端(Angular js)使用了ngFileupload模块,从那里我发送数据以及文件,我正在通过req.body.fieldname访问它,我正在使用mkdirp模块代替fs,你显然可以选择任何你想要的东西。

我提供了演示示例来实现整个事情。

如果您需要任何澄清,请告诉我。祝你好运。

路线

app.post('/whatever', funcname.single('file'), thisiscalledafterupload, route.func);

上传功能

var funcdata = multer.diskStorage({
    destination: function (req, file, cb) {
        var newfoldername = req.body.foldername; //here the folder name is passed along with the files - I have used angular (ngfileupload)
        mkdirp(__dirname + 'somethingroot/folder/' + newfoldername, function (err) {
            console.log(__dirname);
            if (err) console.error(err)
            cb(null, __dirname + 'somethingroot/folder/' + newfoldername);
        });
    },
    filename: function (req, file, cb) {
        var f = Date.now() + '_';
        cb(null, f + file.originalname)
            //file saved now the thisiscalledafterupload will be called
    }
})
var funcname = multer({
    storage: funcdata
});