我现在的配置100% 正确(文件访问权限是公开、强制 HTTPS已经开启、Content-Type设为了text/html,编码 UTF-8),
但浏览器还是下载,通过查资料再和官方客服工单对接,唯一的原因是:腾讯云为了强制使用「静态网站域名」访问,屏蔽了默认域名的直接预览,得到两个方案。
解决方法一:用「静态网站域名」访问
我之前用的链接是默认域名(带.cos.),浏览器会被下载拦截。正确的访问链接必须用:静态网站的域名(带.cos-website.)
直接复制这个链接(替换我的桶名):
https://audio-file-2026-1375681060.cos-website.ap-chengdu.myqcloud.com操作步骤:
- 复制上面的链接。
- 新开一个无痕浏览器窗口(或者清除缓存),粘贴访问。
- 绝对不要直接点击文件列表里的「访问链接」,那个链接会导致下载!
解决方法二:如果还是下载,直接用「在线编辑器」覆盖
因为这已经是text/html了,理论上没问题。如果还不行,是文件上传时的残留错误,直接用在线编辑器重写:
步骤:
- 在存储桶「文件列表」,点击
index.html右侧的「...」(更多操作)。 - 选择「在线编辑编辑器」。
- 把原始的完整代码全选复制 -> 粘贴到在线编辑器里。
- 点击「保存」(覆盖原文件)。
- 再用上面的网站域名访问。
原因解释:
- 默认域名限制:2024 年 1 月 1 日后创建的桶,腾讯云禁止通过默认域名(
cos.ap-chengdu.myqcloud.com)直接浏览网页文件,否则会直接下载。 - 静态网站域名:只有专用的
cos-website.ap-chengdu.myqcloud.com域名,才会正确处理text/html头,直接打开网页。 - UTF-8 没问题:编码是 UTF-8,非常完美,不需要改。
解决方法三:生成预签名 URL 并调整桶权限以及内部的资源文件和代码文件权限
- 桶设置「公有读私有写」,保证网页能访问;代码文件保持「公有读私有写」,保证网页正常加载,静态资源文件保持「私有读写」,防直接下载。
- 进入存储桶 →「文件列表」,找到静态文件(图片、视频、录音等文件)
- 点击右侧「...」-》「详情」
- 进入详情页后,往下滑,找到「预签名 URL」现新版控制台改名为【临时链接】按钮→点击「复制临时链接」按钮,直接点击复制 URL
- 设置过期时间(最长 10 年,到期后重新生成即可,格式为:
https://audio-file-2026-2233322.cos.ap-chengdu.mymiaomiao.com/文件名.mp4?sign=xxx&t=xxx&host=xxx)「 - 复制生成的 URL,替换代码里的
预签名URL - 保存为
index.html,重新上传到桶里
| 方案来做对比 | 防直接下载 | 操作核心 | 有效期 |
|---|---|---|---|
| 预签名 URL | 彻底防直接下载 | 生成 URL | 最长 10 年,到期重生成 |
| 录音文件公有读 | 可直接下载 | 改权限 | 永久有效 |
更新:下载对象」旁边的「刷新有效期」已经设置不了时限了,腾讯云 COS 新版控制台的安全策略 对「私有文件」的临时链接(预签名)做了强制限制——临时链接只能生成 1 小时有效期,且无法手动延长。要想实现这种小项目部署,目前只能放弃「预签名」,改用 「绕过 403 + 保持私有」的方案,把录音文件的权限临时改成 「公有读私有写」,立刻就能播放 / 下载,且保留了index.html的私有访问控制。