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

Mur*_*udy 4 javascript file-upload node.js express multer

<!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>
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

我有这个使用multer模块上传图像的基本代码.但是当文件上传时,它会生成一些随机名称,甚至可以删除文件扩展名.它只是说'文件'类型.那么如何将图像名称与扩展名保持一致.

Krz*_*pka 8

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

req.file
Run Code Online (Sandbox Code Playgroud)

它是属性originalname,mimetype,path等中的对象.检查所有文档:https://github.com/expressjs/multer

但不要相信mimetype.

如何保留图片名称和扩展名?

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

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

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

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

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

fs.rename(oldPath, newPath, callback)
Run Code Online (Sandbox Code Playgroud)

要么

fs.renameSync(oldPath, newPath)
Run Code Online (Sandbox Code Playgroud)