在使用multer在node.js(express)中上传后保留图像文件名称和扩展名

<!doctype html> <html> <body> <form action="/upload" method="POST" enctype="multipart/form-data"> <input type='file' name="image"> <br> <input type="submit" value="submit"> </form> </body> </html> 

 var express = require('express'); var router = express.Router(); var multer = require('multer'); var upload = multer({ dest: 'uploads/', filename: function (req, file, cb) { cb(null, file.fieldname + '-' + Date.now()) } }); router.post('/upload', upload.single('image'), function(req, res){ res.send("Uploaded"); }); module.exports = router; 

我有这个基本的代码,使用MULTER模块上传图像。 但是,当file upload时,它会生成一些随机的名字,甚至摆脱文件扩展名。 它只是说types'文件'。 那么我怎样才能保持图像名称的扩展名。

当您上传文件(使用multer.single方法)时,您将获取文件数据

 req.file 

它是属性原始名称,MIMEtypes,path和其他的对象。 检查所有文档: https : //github.com/expressjs/multer

但不要相信mimetype。

如何保持图像名称和扩展名?

a)使用req.file中的数据重命名上传的文件(不喜欢它)

b)在数据库中存储文件数据(req.file)

编辑关于重命名:当所有下载的文件转到一个目录,并且您将名称更改为原始的时,可能会有冲突 – 可能存在具有相同名称的文件。 因此,当你select这种方式mayby你应该把文件移动到单独的目录。

接下来的事情:原始文件名可能有侮辱性的话或非标准的字符(我不知道它是否可能是安全性)或很长等

好的,如何重命名? 我们可以使用快递包fs https://nodejs.org/api/fs.html和方法&#xFF1A;

 fs.rename(oldPath, newPath, callback) 

要么

 fs.renameSync(oldPath, newPath)