Regex 使用fs重命名multer中上载的图像
当用户上传一张图片(顺便说一句,我使用的是multer)时,在将文件名保存到Mysql表之前,我想用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
“-”
替换空白,然后用“-”
重命名上传到新名称的文件。
这是我的密码。它确实重命名了,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()
上载图像的日期,以及文件的最后类型或扩展名
eximages-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和日期。你能看一下我的问题吗?这里有完整的代码。嗨,你看了我的问题了吗?