Nodejs 如何获取上传图片的尺寸。
Nodejs 如何获取上传图片的尺寸。
如题,打印req.files 里面只有大小,没有尺寸属性。 知道的兄弟支一声。
Node.js 如何获取上传图片的尺寸
在使用 Node.js 处理文件上传时,经常会遇到需要获取上传图片的尺寸(宽度和高度)的需求。默认情况下,req.files
中只包含了文件的大小信息,而没有直接提供图片的尺寸。不过,我们可以通过读取文件流并利用图像处理库来获取这些信息。
这里我们将介绍如何使用 multer
来处理文件上传,并使用 sharp
库来获取上传图片的尺寸。
1. 安装必要的依赖
首先,你需要安装 multer
和 sharp
:
npm install multer sharp
2. 设置 Multer 处理文件上传
接下来,配置 Multer 来处理文件上传。Multer 是一个 Node.js 中间件,用于处理 multipart/form-data
,主要用于上传文件。
const multer = require('multer');
const path = require('path');
// 配置存储引擎
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/') // 指定上传文件的存储目录
},
filename: function (req, file, cb) {
cb(null, Date.now() + path.extname(file.originalname)) // 使用时间戳和原始文件扩展名作为文件名
}
});
const upload = multer({ storage: storage });
3. 获取图片尺寸
现在我们需要创建一个函数来读取文件并使用 sharp
获取其尺寸。
const sharp = require('sharp');
async function getImageDimensions(filePath) {
try {
const metadata = await sharp(filePath).metadata();
return {
width: metadata.width,
height: metadata.height
};
} catch (error) {
console.error('Error getting image dimensions:', error);
return null;
}
}
4. 在路由中使用
最后,在你的 Express 路由中使用上述配置和函数来处理文件上传,并获取图片尺寸。
const express = require('express');
const app = express();
app.post('/upload', upload.single('image'), async (req, res) => {
const filePath = req.file.path;
const dimensions = await getImageDimensions(filePath);
if (dimensions) {
console.log(`Image dimensions: ${dimensions.width}x${dimensions.height}`);
res.send(`Image uploaded successfully! Dimensions: ${dimensions.width}x${dimensions.height}`);
} else {
res.status(500).send('Failed to get image dimensions.');
}
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
通过这种方式,你可以在上传文件后立即获取到图片的尺寸信息,而不需要手动解析文件内容。
文件头的信息应该都在files里头了,目前没有找到有这样的解析组件。
THS
这个貌似是针对上传好了的。 不能在上传之前取到图片尺寸。
一般都是用临时保存的路径来获取图片的尺寸
看着貌似不错,这个有什么依赖吗?
用image-size 模块 很简单 而且很快 npm install image-size
要获取上传图片的尺寸(宽度和高度),可以使用 sharp
或 image-size
这样的库。以下是一个使用 sharp
的示例:
-
首先安装
sharp
:npm install sharp
-
然后在你的代码中使用
sharp
来获取图片尺寸:
const express = require('express');
const multer = require('multer');
const sharp = require('sharp');
const app = express();
const upload = multer({ dest: 'uploads/' });
app.post('/upload', upload.single('image'), async (req, res) => {
try {
const imagePath = req.file.path;
const metadata = await sharp(imagePath).metadata();
console.log(`Image Width: ${metadata.width}`);
console.log(`Image Height: ${metadata.height}`);
res.send('Image uploaded and dimensions retrieved successfully.');
} catch (error) {
console.error(error);
res.status(500).send('Error processing image.');
}
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
在这个例子中,我们使用了 multer
处理文件上传,并使用 sharp
获取上传图片的元数据,从而获取宽度和高度。
解释:
multer
是一个用于处理multipart/form-data
的中间件,主要用于文件上传。sharp
是一个高性能的图像处理库,可以用来读取、操作和写入图像文件。sharp(imagePath).metadata()
方法会异步地返回图像的元数据,包括宽度和高度等信息。