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

使用Strapi上传图片至Cloudinary时遇AssertionError错误,求解决方案

我之前在配置Strapi上传到Cloudinary时也碰到过这个AssertionError [ERR_ASSERTION]: Cannot wrap non-Error object错误,折腾了一阵才解决。这个错误本质是Strapi的错误处理逻辑试图包装一个非Error类型的对象,大概率和配置、依赖或者自定义逻辑有关,给你几个排查方向:

1. 先检查Cloudinary插件的配置是否正确

首先确认config/plugins.js里的上传配置有没有写错,尤其是Cloudinary的核心参数:

module.exports = ({ env }) => ({
  // ...其他插件配置
  upload: {
    config: {
      provider: 'cloudinary',
      providerOptions: {
        cloud_name: env('CLOUDINARY_NAME'),
        api_key: env('CLOUDINARY_KEY'),
        api_secret: env('CLOUDINARY_SECRET'),
      },
      actionOptions: {
        upload: {},
        delete: {},
      },
    },
  },
});

同时检查你的.env文件,确保CLOUDINARY_NAME、CLOUDINARY_KEY、CLOUDINARY_SECRET这几个变量没有拼写错误、多余空格或者引号问题——我当初就是把CLOUDINARY_SECRET写成了CLOUDINARY_SECRECT,折腾了好久。

2. 确认Strapi和Cloudinary插件的版本兼容

版本不匹配是这类奇怪错误的重灾区。如果你用的是Strapi v4,一定要安装对应版本的@strapi/provider-upload-cloudinary,不要随便装beta版或者过时版本。

可以尝试重新安装依赖:

# 删除依赖锁文件和node_modules
rm -rf node_modules package-lock.json
# 重新安装
npm install

如果还是不行,可以指定插件的稳定版本安装:

npm install @strapi/provider-upload-cloudinary@latest

3. 排查自定义生命周期钩子的错误处理

如果你给上传的内容类型加了自定义的生命周期钩子(比如beforeUpload),一定要确保抛出的是标准Error对象,而不是字符串或者其他类型。

比如之前我写过这样的错误代码:

module.exports = {
  lifecycles: {
    async beforeUpload(event) {
      if (event.data.size > 1024 * 1024) {
        return '文件大小不能超过1MB'; // 这里错了!
      }
    },
  },
};

正确的写法应该是抛出Error:

module.exports = {
  lifecycles: {
    async beforeUpload(event) {
      if (event.data.size > 1024 * 1024) {
        throw new Error('文件大小不能超过1MB');
      }
    },
  },
};

如果钩子返回/抛出非Error对象,Strapi的错误处理逻辑就会触发那个AssertionError。

4. 开启Debug日志定位源头

如果上面的方法都没用,可以打开Strapi的Debug日志,看更详细的错误堆栈。修改config/server.js:

module.exports = ({ env }) => ({
  // ...其他配置
  logger: {
    level: 'debug',
    format: 'combined',
  },
});

重启Strapi后再尝试上传,终端里会输出更详细的错误信息,能帮你精准定位到底是哪一行代码出了问题。

5. 单独测试Cloudinary连接

最后可以写个简单的Node脚本,测试你的Cloudinary账号是否能正常上传,排除账号本身的问题:

const cloudinary = require('cloudinary').v2;

cloudinary.config({
  cloud_name: '你的cloud_name',
  api_key: '你的api_key',
  api_secret: '你的api_secret',
});

// 替换成你本地的一张测试图片路径
cloudinary.uploader.upload('./test.jpg', (error, result) => {
  if (error) console.error('Cloudinary连接错误:', error);
  else console.log('上传成功:', result);
});

如果这个脚本能正常运行,那问题肯定出在Strapi的配置或者插件上;如果脚本也报错,那就要检查你的Cloudinary账号状态了。

内容的提问来源于stack exchange,提问作者Awais Raza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:12:50