Regex 使用fs重命名multer中上载的图像

Regex 使用fs重命名multer中上载的图像,regex,node.js,express,fs,multer,Regex,Node.js,Express,Fs,Multer,当用户上传一张图片(顺便说一句,我使用的是multer)时,在将文件名保存到Mysql表之前,我想用“-”替换空白,然后用“-”重命名上传到新名称的文件。 这是我的密码。它确实重命名了,Mysql表用连字符保存了新名称,但是由于某种原因图像没有上传,甚至没有错误,事实上POST请求实际上是成功的 router.post('/uploadpost', upload.single('image'), function(req, res){ var name = req.file.originalna

当用户上传一张图片(顺便说一句,我使用的是multer)时,在将文件名保存到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;
        }

    });
}

为什么不用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 })

文档-

您可以在
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()
上载图像的日期,以及文件的最后类型或扩展名 ex
images-1602486722326.jpeg

你们可以保留图片的原始名称,若你们想如下

 filename: function (req, file, callback) {
        callback(null, file.originalname);
    }
这将获得文件的原始名称,并将其提供给您正在上载的文件 更新 在记忆中

const upload = multer({
    storage: multerS3({
        s3: s3,
        bucket: 'bucket_name',
        acl: 'public-read',
        key: function (request, file, cb) {
            console.log(file);    |--------------  change name here which you want to use
                                  |              
            cb(null, file.originalname);  use
        }
    })
}).array('upload', 1);

你为什么要用原来的名字?我会担心恶意路径…@mscdex您建议我怎么做?将每个上传的图像重命名为任意字符串?目前默认情况下,磁盘存储使用由16个十六进制数字组成的随机/唯一文件名保存到磁盘。文件名(不是绝对路径)在
req.file.filename
属性中可用。所以你可以把它移到你想要/需要的任何地方。例如:
fs.rename(req.file.path,path.join('/my/upload/storage',req.file.filename),…)
Hi,如果我使用的是memoryStorage而不是diskStorage,那么在将原始名称存储到内存之前如何重命名呢?het@kd12345我已经更新了我的答案,请检查出来,谢谢你回复我,我非常感谢。但我的问题是,我正在将文件转换为两种大小,并将原始名称存储在数据库中。如果可能的话,我希望所有3个都有相同的uuid和日期。你能看一下我的问题吗?这里有完整的代码。嗨,你看了我的问题了吗?