Node.js 使用Multer获取图片尺寸

Node.js 使用Multer获取图片尺寸,node.js,express,image-uploading,image-resizing,multer,Node.js,Express,Image Uploading,Image Resizing,Multer,在Node.Js上使用Multer上传图片之前,有没有办法获取图片的尺寸 我有一个应用程序,可以从表单中获取图片并将其上传到曲目库中。我想做的是停止图片上传,如果这一个的宽度和高度低于300像素 下面是Node.Js服务器应用程序 app.post("/upload", function (req, res, fields) { const storage = multer.diskStorage({ destination: "public/data/", f

在Node.Js上使用Multer上传图片之前,有没有办法获取图片的尺寸

我有一个应用程序,可以从表单中获取图片并将其上传到曲目库中。我想做的是停止图片上传,如果这一个的宽度和高度低于300像素

下面是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));
异步代码:

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));
您可以使用上述任何一种方法

npm install image-size --save
现在,首先将来自multer的传入图像存储在您的存储库中,然后如果您所需的尺寸如您所述(dimensions.width<300&&dimensions.height<300)在从存储库中删除存储的图片后发生冲突,但是如果尺寸与您的尺寸匹配,则将图片放在repo中

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

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方法的第二个参数将是存储图片的路径


希望这将有助于某人

这个例子展示了如何获取已经保存在服务器端的图片的尺寸。我正在尝试在将图片保存到服务器之前获取这些信息。是否有可能这样做,或者我必须在获取尺寸之前将文件保存在服务器中?aa multer与此的连接在哪里?在提供的代码中,他们与multer没有连接,multer将在您提供的目录中上载图片,在此之后,您可以通过提供文件路径(您可以从req.file.path中提取)来检查上载图像的维度,然后如果您的维度被违反,您可以删除该图像,但如果一切正常,您可以继续。对于违反维度规则的情况,这基本上是一种方法。您也可以使用其他不同的方法,但这可能会帮助您,谢谢!