Strapi集成Cloudinary V4报错:上传至Cloudinary失败
尝试为Strapi后端集成Cloudinary,严格遵循官方文档操作,甚至更换过Cloudinary密钥,但从媒体库上传图片时仍报错:error: Error uploading to cloudinary: Error: Error uploading to cloudinary:
终端完整报错栈:
[2024-04-14 14:39:51.051] error: Error uploading to cloudinary:
Error: Error uploading to cloudinary:
at /home/cliff/Documents/projects/daktari-admin/node_modules/@strapi/provider-upload-cloudinary/dist/index.js:47:22
at /home/cliff/Documents/projects/daktari-admin/node_modules/cloudinary/lib/utils/index.js:1354:14
at handle_response (/home/cliff/Documents/projects/daktari-admin/node_modules/cloudinary/lib/uploader.js:486:7)
at ClientRequest. (/home/cliff/Documents/projects/daktari-admin/node_modules/cloudinary/lib/uploader.js:603:12)
at ClientRequest.emit (node:events:530:35)
at ClientRequest.emit (node:domain:488:12)
at TLSSocket.socketErrorListener (node:_http_client:495:9)
at TLSSocket.emit (node:events:518:28)
at TLSSocket.emit (node:domain:488:12)
at emitErrorNT (node:internal/streams/destroy:169:8)
[2024-04-14 14:39:51.052] http: POST /upload (3646 ms) 500
排查步骤
验证Cloudinary配置完整性
检查config/plugins.js(或config/plugins.ts)中的配置,确保字段完整且正确: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控制台信息完全匹配(注意区分大小写)。检查网络与代理设置
报错栈涉及TLSSocket,大概率是网络连接问题:- 测试服务器能否访问Cloudinary API:执行
curl https://api.cloudinary.com/v1_1/<你的cloud_name>/image/upload,查看是否返回正常响应。 - 若服务器在代理环境下,需在Strapi配置中添加代理设置,或确保Cloudinary域名在代理白名单内。
- 测试服务器能否访问Cloudinary API:执行
调整Cloudinary插件版本
版本兼容性可能导致上传失败:- 卸载当前插件:
npm uninstall @strapi/provider-upload-cloudinary - 安装稳定版本(如v4.1.0):
npm install @strapi/provider-upload-cloudinary@4.1.0
安装完成后重启Strapi服务。
- 卸载当前插件:
验证Cloudinary账户权限
确认Cloudinary账户无限制、上传配额充足,API密钥已开启上传权限(在控制台"安全"设置中检查)。启用调试日志定位问题
在providerOptions中添加debug: true,重启服务后上传图片,通过终端详细日志定位具体错误:providerOptions: { cloud_name: env('CLOUDINARY_NAME'), api_key: env('CLOUDINARY_KEY'), api_secret: env('CLOUDINARY_SECRET'), debug: true, },
内容的提问来源于stack exchange,提问作者Cliff Gor

