跳到正文
Berth

把有声书存放在兼容 S3 的存储中

更新于 2026 年 10 月 27 日

Berth 可以把书存放在任意兼容 S3 的存储桶中,而不是服务器磁盘上。服务器保存书库并决定谁可以收听;音频本身可以从存储桶或 CDN 直接传到手机。

为什么用对象存储

支持的服务商

任何兼容 S3 的服务都可以使用。后台为以下服务提供预设,可自动填写端点和区域:AWS S3、Cloudflare R2、Yandex Cloud、Backblaze B2、Bunny Storage 和 MinIO。Cloudflare R2 还有一个向导,可以替你创建存储桶和密钥。

连接存储桶

  1. 在服务商的控制台中创建一个存储桶,以及一个对其有读写权限的访问密钥。
  2. 为存储桶添加 CORS 规则:来源为你的 Berth 地址,方法为 GET、HEAD、PUT,请求头为 *。后台会从浏览器把文件直接上传到存储桶,因此这条规则是必需的。
  3. 在 Berth 后台打开存储设置,添加存储,选择“S3 存储桶”,然后选一个预设或自行填写各字段。
  4. 填写名称、存储桶、端点(AWS 留空)、区域(留空则为 us-east-1)、访问密钥 ID 和私有访问密钥。MinIO 需开启路径样式地址;使用 IP 地址或 localhost 时会自动开启。
  5. 点击“检查连接”:Berth 会写入、读回并删除一个小测试文件,并从你的服务器地址检查 CORS。
  6. 将该存储设为默认存储:新书会进入默认存储。

密钥使用服务器密钥 secret.key 加密保存,之后不会再显示。

音频如何到达手机

不签名时,CDN 后面的文件通过永不过期的链接打开。文件名是 SHA-256 哈希,无法猜到,但撤销设备并不会让它已经拿到的链接失效。Bunny CDN 令牌认证可以让链接在 6 小时后过期。

模式工作方式适用场景
直链(默认)手机获得指向存储桶的签名链接,有效期 15 分钟减轻服务器负载
通过服务器由服务器串流文件;链接有效期 6 小时,设备被撤销后立即失效手机无法访问存储桶
通过 CDN链接指向 CDN 或存储桶的公开地址存储桶配有 CDN 时最快

须知

常见问题

Berth 需要存储桶公开访问吗?

不需要。在默认模式下,存储桶保持私有,手机获得 15 分钟后过期的签名链接。

检查提示存储桶不接受来自浏览器的上传,怎么办?

添加 CORS 规则:来源为 Berth 地址,方法为 GET、HEAD、PUT,请求头为 *。然后重新检查。