Nodejs 如何获取上传图片的尺寸。

Nodejs 如何获取上传图片的尺寸。

如题,打印req.files 里面只有大小,没有尺寸属性。 知道的兄弟支一声。

11 回复

Node.js 如何获取上传图片的尺寸

在使用 Node.js 处理文件上传时,经常会遇到需要获取上传图片的尺寸(宽度和高度)的需求。默认情况下,req.files 中只包含了文件的大小信息,而没有直接提供图片的尺寸。不过,我们可以通过读取文件流并利用图像处理库来获取这些信息。

这里我们将介绍如何使用 multer 来处理文件上传,并使用 sharp 库来获取上传图片的尺寸。

1. 安装必要的依赖

首先,你需要安装 multersharp

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');
});

通过这种方式,你可以在上传文件后立即获取到图片的尺寸信息,而不需要手动解析文件内容。


这个肯定通过file获取不到的,比如我知道的在C#中需要通过gdi+ 加载这个图片 才能获取到?获取你可以去读取流 分析文件头,或者已经有的图片解析组件来做这个事情

文件头的信息应该都在files里头了,目前没有找到有这样的解析组件。

这个貌似是针对上传好了的。 不能在上传之前取到图片尺寸。

一般都是用临时保存的路径来获取图片的尺寸

看着貌似不错,这个有什么依赖吗?

用image-size 模块 很简单 而且很快 npm install image-size

要获取上传图片的尺寸(宽度和高度),可以使用 sharpimage-size 这样的库。以下是一个使用 sharp 的示例:

  1. 首先安装 sharp

    npm install sharp
    
  2. 然后在你的代码中使用 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() 方法会异步地返回图像的元数据,包括宽度和高度等信息。
回到顶部