使用Multer获取图片尺寸

时间:2018-02-17 15:02:01

标签: node.js express image-uploading image-resizing 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包来做?

2 个答案:

答案 0 :(得分:0)

我最终将我的照片放在tmp文件夹中,然后才能获得尺寸。

答案 1 :(得分:0)

首先要获取图像的尺寸,请安装此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方法的第二个参数将是存储图片的路径。

希望这对某人有帮助!