上传前必须检查OSS权限与Endpoint配置:Endpoint须严格匹配Bucket地域(如杭州用oss-cn-hangzhou.aliyuncs.com),RAM子账号需含PutObject/GetObject权限并带“/*”通配路径,STS token过期时间应≥900秒。

上传前必须检查的 OSS 权限与 Endpoint 配置
直接上传失败,八成卡在权限或 Endpoint 写错。OSS 的 Endpoint 不是通用域名,必须和 Bucket 所在地域严格匹配,比如华东1(杭州)用 oss-cn-hangzhou.aliyuncs.com,写成 oss-cn-shanghai.aliyuncs.com 就会返回 InvalidEndpoint 或 403。
RAM 子账号上传文件夹需至少具备以下最小权限策略:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": ["oss:PutObject", "oss:GetObject"],
"Resource": ["acs:oss:*:*:your-bucket-name/*"]
}
]
}
- 别漏掉末尾的
/*,否则只能操作根对象,无法写入子路径 - 使用 STS 临时 token 时,
Expiration时间要覆盖完整上传耗时,大文件夹建议设为 900 秒以上 - 本地测试推荐先用主账号 AK/SK 跑通,再切到子账号——避免权限问题和上传逻辑混在一起排查
用 ossutil 批量上传 HTML 文件夹(含目录结构)
ossutil 是阿里云官方命令行工具,对文件夹上传最稳,不依赖 Node.js 环境,也不需要自己递归遍历。
执行前确保已配置好 ossutilconfig(AK、SK、Endpoint),然后运行:
立即学习“前端免费学习笔记(深入)”;
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
ossutil cp -r ./my-html-site/ oss://my-bucket-name/html-site/ --update
-
-r表示递归上传整个目录 -
--update只上传变更或新增文件,跳过未修改的,省带宽也省时间 - 路径末尾斜杠不能省:
./my-html-site/和oss://my-bucket-name/html-site/都要带/,否则会把整个文件夹名当成文件名塞进根目录 - 如果 HTML 引用了相对路径资源(如
css/style.css),上传后结构必须保持一致,ossutil默认保留层级,这点比很多脚本可靠
用 Python oss2 上传时如何处理 index.html 默认首页
OSS 不会自动识别 index.html 为默认页,必须手动设置 Content-Type 和 Bucket 静态网站托管规则,但上传阶段就得为 index.html 单独加 header,否则访问时可能被当二进制下载。
用 oss2.Bucket.put_object_from_file() 上传时,关键是要显式传 headers:
bucket.put_object_from_file(
'html-site/index.html',
'./dist/index.html',
headers={'Content-Type': 'text/html; charset=utf-8'}
)
- 其他 HTML 文件(如
about.html)同样要设Content-Type,不然浏览器可能渲染异常 - CSS/JS 文件建议分别设
text/css和application/javascript,避免 MIME 类型错误触发 CSP 拦截 - 别依赖本地文件后缀自动推断类型——
oss2默认不查后缀,不传headers就是application/octet-stream
上传后访问 403 或空白页的三个高频原因
上传成功 ≠ 能访问。常见真凶不是代码,而是控制台里几个开关没开。
- Bucket 权限是私有?必须设为「公共读」或配置「Bucket Policy」放行 GET 请求,静态网站托管不生效于私有 Bucket
- 静态网站托管没开启?进 OSS 控制台 → Bucket → 「基础设置」→ 「静态页面」→ 设置「默认首页」为
index.html(注意:这里填的是文件名,不是路径) - CDN 或自定义域名没配跨域?如果走 CDN 访问,需在 CDN 控制台补全
Access-Control-Allow-Origin: *响应头,否则 JS 动态加载 HTML 片段会因 CORS 失败
HTML 文件夹上传本身不复杂,难的是每层配置都得对上——Endpoint、权限、MIME、静态托管、CDN 头,漏一个就白传。


















