使用 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 方法的第二个参数将是您的图片存储路径。
希望这对某人有所帮助!
在 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 方法的第二个参数将是您的图片存储路径。
希望这对某人有所帮助!