【问题标题】:Retaining image file name and extension after upload in node.js (express) using multer使用multer在node.js(express)中上传后保留图像文件名和扩展名
【发布时间】:2015-12-15 18:05:56
【问题描述】:

<!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 模块上传图像的基本代码。但是当文件上传时,它会生成一些随机名称,甚至去掉文件扩展名。它只是说输入“文件”。那么如何才能将图像名称与扩展名保持一致。

【问题讨论】:

  • FWIW 您可能不想依赖文件扩展名来进行任意用户上传。您可能会考虑使用像 mmmagic 这样的模块来检查文件内容以确定文件类型。

标签: javascript node.js express file-upload multer


【解决方案1】:

当你上传文件时(使用 multer.single 方法),你在

中获取文件数据
req.file

它是具有 originalname、mimetype、path 和其他属性的对象。检查所有文档: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)

【讨论】:

  • 好的,谢谢您的回答。我现在得到的东西更多。我喜欢将图像原始名称存储在数据库中的想法,但只是出于好奇,因为我是新手,你如何重命名? req.file.originalname = ?
  • 重命名方法也可以将文件移动到不同的目录
猜你喜欢
  • 1970-01-01
  • 2020-06-20
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
  • 1970-01-01
  • 2015-09-15
  • 2016-12-03
  • 1970-01-01
相关资源
最近更新 更多