如何上传多个图像而不上传其他文件

时间:2017-07-03 06:09:08

标签: javascript node.js

我正在为节点js中的多个图像上传制作API。 那么请你帮我解决一下,如何只上传图片而不上传其他文件

var Express = require('express');
var multer = require('multer');
var bodyParser = require('body-parser');
var app = Express();
app.use(bodyParser.json());
var Storage = multer.diskStorage({
    destination: function (req, file, callback) {
        callback(null, "./Images");
    },
    filename: function (req, file, callback) {
        callback(null, file.fieldname + "_" + Date.now() + "_" + file.originalname);
    }
});

var upload = multer({ storage: Storage }).array("imgUploader", 3); //Field name and max count

app.get("/", function (req, res) {
    res.sendFile(__dirname + "/index.html");
});

app.post("/api/Upload", function (req, res) {
    upload(req, res, function (err) {

        if (err) {
            return res.end("Something went wrong!");
        }
        return res.end("File uploaded sucessfully!.");
    });
});

2 个答案:

答案 0 :(得分:0)

使用accept属性作为输入。

<input type="file" name="pic" accept="image/*">

答案 1 :(得分:0)

您可以在fileFilter选项中添加multer功能。所以进行一些重构:

var options = {
  storage: multer.diskStorage({
      destination: function (req, file, callback) {
          callback(null, "./Images");
      },
      filename: function (req, file, callback) {
          callback(null, file.fieldname + "_" + Date.now() + "_" + file.originalname);
      }
  }),
  fileFilter: function (req, file, callback) {
    const isPhoto = file.mimetype.indexOf("image/") === 0
    if (isPhoto) {
      callback(null, true) // true if valid
    } else {
      callback({ message: 'An optional error message'}, false) // false if invalid
    }
  }
}

然后使用以下选项:

var upload = multer(options).array("imgUploader", 3);

请参阅:https://github.com/expressjs/multer#filefilter

输入上的

accept="image/*"仅提供客户端验证,可以使用开发控制台删除。