multer保存图像没有mimetype

时间:2015-10-18 18:41:23

标签: node.js multer

我正在使用"multer": "^1.0.6",我希望将图像保存在上传文件夹中。 我的代码是

app.post('/post', multer({dest: './uploads/'}).single('file'), function (req, res) {
response = {
    message: 'File uploaded successfully',
    filename: req.file.filename
};
res.end(JSON.stringify(response));
});

但我在上传文件夹8e6e425f8756e0bafb40ed1a3cb86964

中有这个名字的文件

为什么我没有mimetype这个名字?

2 个答案:

答案 0 :(得分:1)

Multer保存没有扩展名的文件,您可以在GitHub上阅读:

filename用于确定文件夹中应该命名的文件。如果没有给出文件名,则每个文件都会被赋予一个不包含任何文件扩展名的随机名称。

如果您想使用您在此处编写代码的扩展名进行保存:

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, '/tmp/my-uploads')
  },
  filename: function (req, file, cb) {
    cb(null, file.originalname); // modified here  or user file.mimetype
  }
})

var upload = multer({ storage: storage })

您可以在此处找到所有信息https://github.com/expressjs/multer/blob/master/README.md

答案 1 :(得分:1)

Multer不担心文件的扩展并完全放在你身边:你必须自己定义一个能够完成它的功能。例如,像这样:

var multer  = require('multer');
var upload = multer({ storage: multer.diskStorage({

    destination: function (req, file, cb) {
      cb(null, './uploads');
    },

    filename: function (req, file, cb) {
      var ext = require('path').extname(file.originalname);
      ext = ext.length>1 ? ext : "." + require('mime').extension(file.mimetype);
      require('crypto').pseudoRandomBytes(16, function (err, raw) {
        cb(null, (err ? undefined : raw.toString('hex') ) + ext);
      });
    }

})});

app.post('/post', upload.single('file'), function (req, res) {
  response = {
    message: 'File uploaded successfully',
    filename: req.file.filename
  };
  res.end(JSON.stringify(response));
});