七牛云文件上传返回403错误,如何排查和解决?

Designer°子璇 阅读 110

在用七牛云的表单上传功能时,前端提交后总是返回403 Forbidden错误。已经确认AK/SK有效,域名白名单也添加了测试环境IP,但问题依旧。

代码是按照官方文档写的,表单结构如下:


<form action="https://upload.qiniup.com" method="post" enctype="multipart/form-data">
  <input type="text" name="token" value="生成的上传凭证" hidden>
  <input type="file" name="file">
  <button>上传</button>
</form>

控制台报错显示:”XMLHttpRequest cannot load. Invalid signature”,但后端生成的上传凭证是实时获取的。有没有可能是form表单参数漏了什么?或者跨域配置哪里没配对?

我来解答 赞 7 收藏
二维码
手机扫码查看
1 条解答
Top丶青青
403 Forbidden 和 "Invalid signature" 基本可以确定是签名问题。你已经确认 AK/SK 有效,那可能是上传凭证生成时的 Policy 配置或者签名算法有问题。

先检查后端生成上传凭证的部分。Policy 的 scope 格式要对,时间范围也要设置合理。代码放这了,PHP 版本的示例:

// PHP 示例
use QiniuAuth;

$accessKey = '你的AK';
$secretKey = '你的SK';
$bucket = '你的存储空间名';

// 创建上传 token
function uptoken($bucket) {
global $accessKey, $secretKey;
$auth = new Auth($accessKey, $secretKey);
$putPolicy = [
'scope' => $bucket,
'deadline' => time() + 3600 // 有效期1小时
];
$token = $auth->uploadToken($bucket, null, 3600, $putPolicy);
return $token;
}

echo uptoken($bucket);


前端部分没啥大问题,但建议把 hidden 改成 type="hidden",这样更标准:

<form action="https://upload.qiniup.com" method="post" enctype="multipart/form-data">
<input type="hidden" name="token" value="后端生成的token">
<input type="file" name="file">
<button>上传</button>
</form>


最后再确认下:
1. 存储空间名是否正确
2. 时间戳是否准确(服务器时间和本地时间不能差太多)
3. 如果用的是自定义域名,CNAME 配置有没有生效

还是不行的话,直接抓个包看看请求里的 Authorization 字段对不对。
点赞 4
2026-02-01 23:10