使用 multer 在 node.js (express) 中上传后保留图像文件名和扩展名
Retaining image file name and extension after upload in node.js (express) using 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>
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'。那么我怎样才能保留图像名称和扩展名。
当你上传文件时(使用multer.single方法),你会在
中获取文件数据
req.file
它是具有原始名称、mimetype、路径和其他属性的对象。检查所有文档:https://github.com/expressjs/multer
但不要相信 mimetype。
如何保留图片名称和扩展名?
a) 使用 req.file 中的数据重命名上传的文件(不喜欢)
b) 将文件数据 (req.file) 存储到 db
编辑重命名:
当所有下载的文件都进入一个目录,并且您将名称更改为原始文件时,可能会发生冲突 - 可能存在同名文件。因此,当您选择这种方式时,您可能应该将文件移动到单独的目录中。
接下来:原始文件名可能有侮辱性的词或非标准字符(我不知道这是否可能是安全问题)或很长等
好的,如何重命名?
我们可以使用快递包裹 fs https://nodejs.org/api/fs.html
和方法:
fs.rename(oldPath, newPath, callback)
或
fs.renameSync(oldPath, newPath)
<!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'。那么我怎样才能保留图像名称和扩展名。
当你上传文件时(使用multer.single方法),你会在
中获取文件数据req.file
它是具有原始名称、mimetype、路径和其他属性的对象。检查所有文档:https://github.com/expressjs/multer
但不要相信 mimetype。
如何保留图片名称和扩展名?
a) 使用 req.file 中的数据重命名上传的文件(不喜欢)
b) 将文件数据 (req.file) 存储到 db
编辑重命名: 当所有下载的文件都进入一个目录,并且您将名称更改为原始文件时,可能会发生冲突 - 可能存在同名文件。因此,当您选择这种方式时,您可能应该将文件移动到单独的目录中。
接下来:原始文件名可能有侮辱性的词或非标准字符(我不知道这是否可能是安全问题)或很长等
好的,如何重命名? 我们可以使用快递包裹 fs https://nodejs.org/api/fs.html 和方法:
fs.rename(oldPath, newPath, callback)
或
fs.renameSync(oldPath, newPath)