NodeJS:获取文件夹中的图像文件大小,如果图像太大则压缩



我试图在文件夹中获取图像大小,然后压缩大于(例如:2MB)的图像,函数getFilesizeInBytes返回始终大小:0,我做错了什么?

const fs = require('fs');
const path = require('path');
const imagemin = require("imagemin");
const imageminMozjpeg = require("imagemin-mozjpeg");
const imageminPngquant = require("imagemin-pngquant");
const imageminGifsicle = require('imagemin-gifsicle');

const directoryPath = path.join(__dirname, 'uploads/products');
fs.readdir(directoryPath, function (err, files) {
if (err) {
return console.log('Unable to scan directory: ' + err);
} 
files.forEach(function (file) {
console.log(file); 
console.log(getFilesizeInBytes(file))
});
});

function getFilesizeInBytes(filename) {
var stats = fs.statSync(directoryPath, filename);
var fileSizeInBytes = stats.size;
return fileSizeInBytes;
}

//Compress images
let compressPlugin = fileExt == 'jpg' || fileExt == 'jpeg' ? imageminMozjpeg({quality: 50}) : 
fileExt == 'png' ? imageminPngquant({quality: [0.5, 0.6]}) : 
fileExt == 'gif' ? imageminGifsicle() : 0;
(async () => {
const files = await imagemin([`../uploads/products/${fileName}`], {
destination: "../uploads/products",
plugins: [ compressPlugin ]
});
fs.unlink(filePath, err => err ? console.log(err) : 0);
return res.status(200).send({product: productUpdated});                     
})();

看起来问题与statSync函数的错误使用有关。请试着用这种方式:

function getFilesizeInBytes(filename) {
var stats = fs.statSync(`${directoryPath}/${filename}`);
var fileSizeInBytes = stats.size;
return fileSizeInBytes;
}

更多信息请查看Node.js文档

最新更新