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