使用fs在multer中重命名上传的图像

时间:2015-11-02 19:46:19

标签: regex node.js express fs multer

当用户上传图片时 - 我顺便使用了multer - 使用包含空格的名称,我想在将文件名保存到my之前用"-"替换空格Mysql表然后还使用"-"将已上载的文件重命名为新名称。 这是我的代码。它重命名,Mysql表用连字符保存新名称,但图像由于某种原因没有上传,甚至没有错误,事实上POST请求实际上是成功的。

router.post('/uploadpost', upload.single('image'), function(req, res){
var name = req.file.originalname;
var reName;
if(/\s/g.test(name)){
    reName = name.replace(" ", "-");
    fs.rename(req.file.path, reName, function(err){
        if(err){
            throw err;
        }

    });
}

2 个答案:

答案 0 :(得分:1)

为什么不在Multer保存文件时更改名称? 这样的事情:

function generateName(){
   return 'newname';
}

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, '/tmp/my-uploads')
  },
  filename: function (req, file, cb) {
    cb(null, generateName()); // generate new name 
  }
})

var upload = multer({ storage: storage })

文档 - https://github.com/expressjs/multer#diskstorage

答案 1 :(得分:0)

您可以像下面的方式那样在multer中轻松更改文件名

const multer = require('multer');
let fs = require('fs-extra');

let storage = multer.diskStorage({
    destination: function (req, file, cb) {
        let path = `tmp/upload`;
        fs.mkdirsSync(path);
        cb(null, path);
    },
    filename: function (req, file, cb) {
        console.log(file);
        cb(null, file.fieldname + '-' + Date.now() + "." + extension);
    }
})

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

在上面的代码中,我给这样的文件名,例如file.fieldname fieldname是要用来发送图像的字段名,例如fieldname可以是"image"或其他任何字符,而不是-,Date.now()上传图像的日期和文件的最后类型或extensionimages-1602486722326.jpeg

OR

如果需要,您可以保留图像的原始名称

 filename: function (req, file, callback) {
        callback(null, file.originalname);
    }

这将获取文件的原始名称并将其提供给您要上传的文件