无法上传到 S3 (Cloudflare R2)

我按照这里的某些指南在我的网站上配置 R2,但现在当我尝试上传文件时,只看到一条通用的“抱歉,您的上传失败。请重试。”消息。我在日志中看到的唯一内容是:

我已在 app.yml 文件中配置了我的 URL,因为 Web 界面拒绝了我按照操作指南帖子中所述格式设置的 URL(格式无效):

image

CDN_URL 是自定义域名(在 Cloudflare 中设置),S3_ENDPOINT 是 Web 面板中的 URL。我已正确配置了所有选项,并创建了正确的身份验证令牌:

看起来 Cloudflare 确实看到了一些请求,但没有任何内容被存储。

问题出在哪里?

嘿,

这是否是因为 S3 CDN URL 和 S3 端点末尾的斜杠(/)?

你遵循的是这些指南吗?你确定你的上传存储桶名称是“discourse”吗?

是的,我参考的是第一个。

没错

我会尝试去掉斜杠,然后回来反馈结果。

我去掉了末尾的斜杠,但还是不行。同样的 Unauthorized(未授权)错误。

Token 的配置也没问题。

你确定 Cloudflare R2 令牌具有读写权限吗?并且是否正确配置了 CORS 策略?我知道你的服务器配置有些独特,Cloudflare 存储桶的权限和配置必须完全正确,否则就会抛出权限错误。

你创建了错误类型的 Token —— 你创建的是通用 API Token。你需要创建一个 R2 Bucket Token:

  1. 进入 Cloudflare 仪表盘 → R2 对象存储(左侧边栏中位于 storage & databases 下)。
  2. 在 R2 概览页面的右侧,点击 manage(API Tokens)。
  3. 点击 create account API token
  4. 输入合适的 Token 名称,并将权限设置为 object read & write,然后点击 save
  5. 系统将输出一个 access key id 和一个 secret access key。你需要将这两个值填入 Discourse 的 S3 配置中。

另外,是的,你需要删除末尾的斜杠,因为 Discourse 很可能会拒绝它们。

谢谢,原来问题出在这里……真是无谓的困惑,但这得怪 Cloudflare。

是的,Cloudflare 仪表盘的配置确实像马蜂窝一样复杂,哈哈。很高兴你解决了这个问题!