您遇到的 Access Denied 错误表明腾讯云对象存储(OSS)服务拒绝了上传请求,这通常是由于权限配置问题导致的。以下是详细的排查和解决方法:

查看日志提示ERROR 上传失败: Access Denied.总结下来配置完全正常的情况 一种是SecretKey是新建生效问题,如果新建过老KEY使用原来的就正常,或者删除现有的SecretKey再新建

202506280407298411. 检查SecretKey和SecretId

验证密钥是否正确

  • 确保使用的 SecretId 和 SecretKey 是最新有效的
  • 在腾讯云控制台重新获取密钥:
    1. 登录腾讯云控制台
    2. 进入「访问管理」→「API密钥管理」
    3. 确认或重新生成SecretKey

代码中正确配置

javascript
// 示例配置
const cos = new COS({
  SecretId: 'AKIDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  SecretKey: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
});

2. 检查存储桶(Bucket)权限

存储桶访问权限设置

  1. 进入COS控制台
  2. 找到目标存储桶 → 点击「权限管理」
  3. 检查:
    • 公有权限:至少设置为”私有读写”或根据需求调整
    • 用户权限:确保当前账号有写入权限

20250628041010800跨域设置(CORS)

  1. 在存储桶的「安全设置」→「跨域访问CORS设置」

20250628041059700添加或修改规则,确保包含:

json
{
  "AllowedOrigins": ["*"],
  "AllowedMethods": ["PUT", "POST", "GET", "DELETE", "HEAD"],
  "AllowedHeaders": ["*"],
  "ExposeHeaders": ["ETag"],
  "MaxAgeSeconds": 3600
}

3. 检查IAM权限策略

确认账号有足够权限

  1. 进入「访问管理」→「策略管理」
  2. 检查关联的策略是否包含COS写入权限,如:
    • QcloudCOSFullAccess (完全访问)
    • QcloudCOSDataWriteOnly (仅写入)

20250628041213483

20250628041239338或创建自定义策略

json
{
  "version": "2.0",
  "statement": [
    {
      "effect": "allow",
      "action": [
        "cos:PutObject",
        "cos:PostObject",
        "cos:InitiateMultipartUpload",
        "cos:ListMultipartUploads",
        "cos:ListParts",
        "cos:UploadPart",
        "cos:CompleteMultipartUpload"
      ],
      "resource": [
        "qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"
      ]
    }
  ]
}

4. 检查请求参数

验证上传代码

确保上传请求包含所有必要参数:

javascript
cos.putObject({
  Bucket: 'examplebucket-1250000000',
  Region: 'ap-guangzhou',
  Key: 'exampleobject',
  Body: file,
}, function(err, data) {
  console.log(err || data);
});

常见参数问题

  • Bucket名称格式examplebucket-1250000000 (必须包含APPID)
  • Region匹配:确保与存储桶创建时选择的区域一致
  • Key命名规范:不能以斜杠开头

5. 临时访问凭证(推荐生产环境使用)

使用临时密钥更安全

javascript
// 从服务器获取临时密钥
const credentials = await getTempCredential(); 

const cos = new COS({
  getAuthorization: function(options, callback) {
    callback({
      TmpSecretId: credentials.tmpSecretId,
      TmpSecretKey: credentials.tmpSecretKey,
      SecurityToken: credentials.sessionToken,
      StartTime: credentials.startTime,
      ExpiredTime: credentials.expiredTime,
    });
  }
});

6. 调试和日志

开启SDK调试日志

javascript
const cos = new COS({
  // ...其他配置
  Logger: console, // 打印调试日志
});

检查腾讯云返回的完整错误

javascript
cos.putObject({/*...*/}, function(err, data) {
  if (err) {
    console.error('完整错误信息:', err);
  }
});

7. 其他可能原因

  1. 存储桶不存在:确认Bucket名称拼写正确
  2. 网络策略限制:检查安全组/ACL是否阻止请求
  3. 欠费停服:确认账户余额充足
  4. 请求超时:调整SDK超时设置

通过以上步骤系统排查,应该能解决您的”Access Denied”问题。如果仍无法解决,建议提供完整错误日志联系腾讯云技术支持

主题授权提示:请在后台主题设置-主题授权-激活主题的正版授权,授权购买:RiTheme官网

服务声明: 本网站除正版商用版块可商用外,其他所有发布的源码、软件和资料均为作者提供或网友推荐收集各大资源网站整理而来,仅供功能验证和学习研究使用,您必须在下载后24小时内删除。不得使用于非法商业用途,不得违反国家法律,否则后果自负!一切关于该资源商业行为与本站无关。如果您喜欢该程序,请支持购买正版源码,得到更好的正版服务。如有侵犯你的版权合法权益,请邮件或QQ:3089659733与我们联系处理删除(邮箱:ynzsy@qq.com),本站将立即更正。