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

使用Next.js客户端上传至Cloudinary时遭遇401未授权错误

排查Cloudinary签名上传401未授权问题

核心问题:签名参数键名不匹配

你的代码中生成签名时使用了驼峰式的timeStamp作为参数键名,但Cloudinary要求签名计算时必须使用**小写的timestamp**键名。这会导致签名计算的参数集合与实际上传请求中的参数集合不匹配,即使时间戳值和签名字符串看起来一致,Cloudinary的服务器端验证也会失败。

修复代码:

修改getUploadSignature函数中的签名生成部分:

function getUploadSignature(){
  const timeStamp = Math.round((new Date).getTime() / 1000);

  // 把timeStamp键名改为小写的timestamp
  const signature = cloudinary.utils.api_sign_request({
    folder: 'imageUploadTest',
    timestamp: timeStamp, 
  }, cloudinaryConfig.api_secret);  

  console.log({getSignTS: signature, timeStamp});

  return { 
    cloudName: cloudinaryConfig.cloud_name,
    apiKey: cloudinaryConfig.api_key, 
    timeStamp, 
    signature, 
  };
}

其他需要修正的点

  1. 移除多余的CloudName参数:
    你在getSignedFormData中向FormData添加了cloudName字段,但该字段不属于Cloudinary上传请求的必填参数,且未包含在签名计算的参数中,额外参数会触发签名验证失败。请删除这行代码:

    formData.append('cloudName', cloudName);
    
  2. 固定文件夹模式的适配:
    老账户的固定文件夹模式下,需确认folder: 'imageUploadTest'是账户设置的固定文件夹的子路径,或者尝试暂时移除folder参数,使用默认固定文件夹上传,排查是否为文件夹权限/路径匹配问题。

  3. 验证签名计算逻辑:
    可以手动用Cloudinary的签名规则验证:将timestamp、folder参数按字典序排序,拼接成folder=imageUploadTest&timestamp=xxxx的格式,再加上你的api_secret,用MD5哈希计算,对比是否和生成的签名一致,确保api_secret配置无误。

  4. 确认上传请求URL:
    确保客户端上传请求的URL格式正确:https://api.cloudinary.com/v1_1/${cloudName}/image/upload,替换${cloudName}为你的Cloudinary云名称。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 05:52:39