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

Cesium Ion REST API上传文件至S3报AccessDenied权限错误

Cesium Ion 上传LAS文件到S3报AccessDenied解决方案

你代码里有两个直接触发权限错误的核心问题,按下面改就能解决:

1. 无效的Prefix参数导致上传路径不在授权范围内

AWS SDK v3的上传接口根本不识别顶层Prefix参数,你单独写这个字段完全不会生效。
Cesium Ion返回的临时STS凭证,只允许你往指定前缀的路径下上传文件,你现在的代码实际是往存储桶根目录传文件,完全不在授权路径里,必然被拒绝。
把prefix直接拼到Key字段里就行,注意处理斜杠避免路径拼接错误:

const params = {
  Bucket: uploadLocation.bucket,
  // 删除无效的Prefix配置,拼接前缀到Key
  Key: `${uploadLocation.prefix.replace(/\/$/, '')}/${selectedFile.name}`,
  Body: selectedFile
};

2. 硬编码区域导致签名校验失败

你代码里写死了region: 'us-east-1',但Cesium Ion会根据资产的实际存储位置返回对应区域的上传信息,uploadLocation对象本身就携带region字段,硬编码区域会导致v4签名计算的区域和桶实际区域不匹配,直接触发权限拒绝。
修改S3客户端初始化配置,同时补个路径风格访问的配置避免寻址错误:

client: new S3Client({
  apiVersion: '2006-03-01',
  // 用接口返回的实际区域,不要硬编码
  region: uploadLocation.region,
  endpoint: uploadLocation.endpoint,
  credentials: S3ClientCred,
  // 强制路径风格访问,适配Cesium提供的上传端点
  forcePathStyle: true
})

其他需要核对的点

  • 删掉你手动加的signatureVersion: 'v4'配置,AWS SDK v3默认就用v4签名,手动指定在部分版本下会引发配置覆盖问题。
  • 确认创建资产接口传入的资产类型正确:LAS点云文件对应的源资产类型为POINT_CLOUD,类型传错返回的凭证权限会不匹配。
  • 确认拿到uploadLocation后15分钟内完成上传,临时凭证默认有效期只有15分钟,超时会失效。
  • 确认uploadLocation.endpoint是带https://前缀的完整地址,漏了协议头会导致SDK端点解析错误,签名计算失败。

修正后重新测试即可正常上传,不需要额外配置其他参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:06:31