You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js使用probe-image-size获取svg/gif图片信息报ProbeError如何解决

报错原因
  • 内置请求逻辑存在缺陷:probe-image-size 自带的 HTTP 请求逻辑未携带合法 User-Agent 等头部,很多静态资源服务器会拦截此类无标识请求,返回错误页面而非图片二进制内容,因此无法识别格式。
  • 读取内容长度不足:默认仅读取响应前 16KB 内容判断格式,部分 SVG 文件开头存在大量 XML 声明、注释、空行等冗余内容,核心标识 <svg> 标签位于 16KB 以外,无法被捕获识别。
  • 未处理压缩响应:部分服务器会返回 gzip/deflate 压缩的图片资源,probe 内置逻辑默认不会自动解压压缩内容,拿到的压缩二进制流无法匹配图片格式特征。
  • 低版本兼容性问题:5.x 以下的旧版本 probe-image-size 存在已知的 GIF、SVG 格式识别 Bug,也会触发该报错。
修复方案

放弃使用 probe 内置的请求逻辑,自定义发起请求获取图片二进制内容后再传入 probe 解析,可控性更高,可覆盖绝大多数异常场景,具体实现如下:

  1. 安装依赖:
npm install probe-image-size axios
  1. 改造后的代码:
const probe = require('probe-image-size');
const axios = require('axios');

const getFileMetaData = async (fileUrl) => {
  try {
    // 自定义请求配置,适配各类静态资源服务器规则
    const response = await axios.get(fileUrl, {
      responseType: 'arraybuffer',
      headers: {
        // 配置合法UA避免被服务器拦截
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
        'Accept': 'image/*'
      },
      // 自动解压gzip/deflate压缩内容
      decompress: true,
      // 最多读取256KB内容,覆盖绝大多数SVG冗余开头场景
      maxContentLength: 256 * 1024
    });
    // 将二进制buffer传入probe解析
    return await probe(response.data);
  } catch (err) {
    // SVG场景兜底:probe识别失败时自行解析SVG属性提取尺寸
    if (fileUrl.toLowerCase().endsWith('.svg')) {
      const svgContent = response.data.toString('utf8');
      const widthMatch = svgContent.match(/<svg[^>]*width\s*=\s*["'](\d+(?:\.\d+)?)(?:px)?["']/i);
      const heightMatch = svgContent.match(/<svg[^>]*height\s*=\s*["'](\d+(?:\.\d+)?)(?:px)?["']/i);
      const viewBoxMatch = svgContent.match(/<svg[^>]*viewBox\s*=\s*["']\d+\s+\d+\s+(\d+(?:\.\d+)?)\s+(\d+(?:\.\d+)?)["']/i);
      return {
        width: widthMatch ? Number(widthMatch[1]) : (viewBoxMatch ? Number(viewBoxMatch[1]) : null),
        height: heightMatch ? Number(heightMatch[2]) : (viewBoxMatch ? Number(viewBoxMatch[2]) : null),
        type: 'svg',
        mime: 'image/svg+xml'
      };
    }
    throw err;
  }
};

补充说明:如果遇到未定义宽高也无 viewBox 属性的特殊 SVG 文件,兜底逻辑也会返回宽高为 null,该类属于 SVG 本身未明确尺寸,属于正常情况。

内容的提问来源于stack exchange,提问作者Nouman Shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:27:06