Node.js Multer文件名

时间:2018-07-03 09:42:30

标签: node.js express filenames multer

我想通过输入值而不是字段名来自定义应用程序的文件名。
换句话说,我想用 req.body.my_field 这样的东西来更改 file.filename ,但my_field是输入的名称。
最后,我想要这样的东西:

"filename": "value_of_my_field-1530606094020.jpg",  
"path": "uploads\\value_of_my_field-1530606094020.jpg",  

注意到my_field的值出现在控制台上。
我需要一些帮助。
 这是我的代码:

var express = require('express')
var multer  = require('multer')
const path = require('path')

// Init app
var app = express()
const port= 3000

// Set storage engine
const storage = multer.diskStorage({
    destination: './uploads/',
    filename: function(req, file, cb){
        cb(null, file.fieldname + '-' + Date.now() +     path.extname(file.originalname));
    }
});

// Init upload
const upload = multer({
    storage: storage,
    limits:{fileSize:1000000},
});


app.post('/upload', upload.single('myImage'), function (req, res, next) {
    if(req.file == undefined){
        res.json({'Error': 'No File Selected!'});
    } else {
        res.json(req.file);
        console.log(req.body.my_field);
    }
})

app.listen(port, () => console.log('server started on port '+ port));

预先感谢

2 个答案:

答案 0 :(得分:0)

我不太确定您的问题是什么,因为您的代码当前正在执行您想要的操作(使用时间戳保存文件)。如果要摆脱req.body.my_field的日志记录,请删除行console.log(req.body.my_field);

答案 1 :(得分:0)

您应该能够访问文件名功能中的req对象。所以你可以做这样的事情-

// Set storage engine
const storage = multer.diskStorage({
    destination: './uploads/',
    filename: function(req, file, cb){
        cb(null, req.body.my_field + '-' + Date.now() +     path.extname(file.originalname));
    }
});