使用 Multer 获取图片尺寸

Get picture dimensions with Multer

在 Node.Js 上使用 Multer 上传图片之前,是否有任何方法可以获取图片的尺寸?

我有一个应用程序可以从表单中获取图片并将它们上传到目录中。我想做的是,如果这张图片的宽高小于300px,就停止上传。

这是 Node.Js 服务器应用

app.post("/upload", function (req, res, fields) {

    const storage = multer.diskStorage({
      destination: "public/data/",
      filename: function (req, file, cb) {
        crypto.randomBytes(30, (err, buf) => {
          cb(null, buf.toString("hex") + path.extname(file.originalname))
        })
      }
    });

    const upload = multer({
      storage: storage
    }).fields([{
      name: "pp"
    }, {
      name: "banner"
    }]);

    upload(req, res, (err) => {
      if (err) throw err;
      if (req.files.pp) {
        var PPsrc = req.files.pp[0].path.slice(7);
        var hasPP = 1;
      } else {
        var PPsrc = null;
        var hasPP = 0;
      }
      if (req.files.banner) {
        var Bannersrc = req.files.banner[0].path.slice(7);
        var hasBanner = 1;
      } else {
        var Bannersrc = null;
        var hasBanner = 0;
      }

      con.query("SQL Request", [hasPP, PPsrc, hasBanner, Bannersrc, sess.email], function (err) {
        if (err) throw err;
        console.log("Profile Picture and banner updated for user: " + sess.email);
        res.redirect("/profile");
      });
    }); 
  })

还有我的表格:

<form action="/upload" enctype="multipart/form-data" method="post">
          <label for="pp_uploader">Add a profile picture</label>
          <input type="file" id="pp_uploader" name="pp" accept="image/jpeg, image/jpg"/><br>
          <label for="banner_uploader">Add a Banner</label>
          <input type="file" id="banner_uploader" name="banner" /><br>
          <input class="sbutton" type="submit" value="Envoyer" />
        </form>

有没有办法用 npm 包来做?

我最后把我的照片放在一个 tmp 文件夹中以获得它们的尺寸。

首先要获取图像的尺寸安装这个 npm 包

npm install image-size --save

同步代码:

var sizeOf = require('image-size');
var dimensions = sizeOf('someimage.png'); // replace with your image
console.log(dimensions.width, dimensions.height);

异步代码:

var { promisify } = require('util');
var sizeOf = promisify(require('image-size'));
sizeOf('someimage.png')
  .then(dimensions => { console.log(dimensions.width, dimensions.height); })
  .catch(err => console.error(err));

您可以使用上述任何一种方法

现在首先将传入的图像存储在来自 multer 的存储库中,然后如果您提到的所需尺寸被违反(dimensions.width < 300 && dimensions.height < 300),它们在删除后存储图片来自存储库,但如果尺寸根据您的尺寸匹配,则将图片放在存储库中。

从存储库中删除图像的代码

const path = require("path");
const fs = require("fs");

const clearImage = filePath => {
  filePath = path.join(__dirname, "../images/", filePath);
  fs.unlink(filePath, err => {
    console.log(err);
  });
};

注意: path.join 方法的第二个参数将是您的图片存储路径。

希望这对某人有所帮助!