Skip to content

feat(s3): support direct transfer redirects#2598

Merged
xrgzs merged 1 commit into
OpenListTeam:mainfrom
syscc:feat/s3-direct-transfer-redirect
Jun 12, 2026
Merged

feat(s3): support direct transfer redirects#2598
xrgzs merged 1 commit into
OpenListTeam:mainfrom
syscc:feat/s3-direct-transfer-redirect

Conversation

@syscc

@syscc syscc commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Summary / 摘要

  • Add an S3 HTTP wrapper that returns 302 Found for eligible GET Object requests when the mapped OpenList storage can provide a direct download URL and proxying is not required.

  • Add 307 Temporary Redirect support for eligible PUT Object requests when the mapped storage supports HttpDirect single-request PUT uploads.

  • Keep the existing gofakes3 streaming path as the fallback for unsupported cases, including multipart upload, copy requests, streaming SigV4 payloads, drivers without direct upload, forced proxy rules, chunked direct-upload sessions, and direct-upload info requiring extra headers.

  • Allow OneDrive Sharelink direct-upload info to use Microsoft Graph simple /content upload URLs for files within the 250 MiB single-upload limit, so S3 PUT Object can be redirected safely for those files.

  • This PR has breaking changes.
    / 此 PR 包含破坏性变更。

  • This PR changes public API, config, storage format, or migration behavior.
    / 此 PR 修改了公开 API、配置、存储格式或迁移行为。

  • This PR requires corresponding changes in related repositories.
    / 此 PR 需要关联仓库同步修改。

Related repository PRs / 关联仓库 PR:

  • OpenList-Frontend:
  • OpenList-Docs:

Testing / 测试

  • go test ./...
  • go test ./server/s3 ./server/handles ./drivers/onedrive_sharelink
  • Manual test / 手动测试:
    • Started OpenList from source with S3 enabled on port 5246.
    • Verified unsigned S3 object requests are still rejected with 403 InvalidAccessKeyId.
    • Verified signed S3 GET Object returns 302 Found with a direct OneDrive Sharelink download URL.
    • Verified signed S3 GET Object?x-id=GetObject also returns 302 Found.
    • Verified signed S3 PUT Object to OneDrive Sharelink returns 307 Temporary Redirect with a direct Graph /content upload URL for a small file.
    • Verified signed S3 PUT Object to 189CloudPC falls back to the existing server-side upload path and succeeds with 200 OK.

Checklist / 检查清单

  • I have read CONTRIBUTING.
    / 我已阅读 CONTRIBUTING
  • I confirm this contribution follows the repository license, contribution policy, and code of conduct.
    / 我确认此贡献符合仓库许可证、贡献规范和行为准则。
  • I have formatted the changed code with gofmt, go fmt, or prettier where applicable.
    / 我已按适用情况使用 gofmtgo fmtprettier 格式化变更代码。
  • I have requested review from relevant maintainers or code owners where applicable.
    / 我已在适用情况下请求相关维护者或代码所有者审查。

AI Disclosure / AI 使用声明

  • This PR includes AI-assisted content.
    / 此 PR 包含 AI 辅助内容。

Tools used / 使用工具:

  • ChatGPT
  • Codex
  • GitHub Copilot
  • Claude
  • Gemini
  • Other (please specify) / 其他(请注明):

Usage scope / 使用范围:

  • Code generation / 代码生成

  • Refactoring / 重构

  • Documentation / 文档

  • Tests / 测试

  • Translation / 翻译

  • Review assistance / 审查辅助

  • I have reviewed and validated all AI-assisted content included in this PR.
    / 我已审核并验证此 PR 中的所有 AI 辅助内容。

  • I have ensured that all AI-assisted commits include Co-Authored-By attribution.
    / 我已确保所有 AI 辅助提交都包含 Co-Authored-By 归属信息。

  • I can reproduce all AI-assisted content included in this PR without any AI tools.
    / 我可以在没有任何 AI 工具的情况下重现此 PR 中包含的所有 AI 辅助内容。

Redirect S3 GET object requests to direct links when the underlying storage can provide one and proxying is not required.

Redirect eligible S3 PUT object requests to HttpDirect single PUT upload URLs with 307, while falling back to the existing gofakes3 stream path for unsupported uploads.

Allow OneDrive Sharelink direct upload info to use simple content PUT URLs for files within Microsoft's single-upload limit.

Co-authored-by: Codex <codex@openai.com>
@jyxjjj

jyxjjj commented Jun 11, 2026

Copy link
Copy Markdown
Member

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d032dbbbb1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread server/s3/redirect.go

@jyxjjj jyxjjj left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since this is a fake s3, we do not really need to worry about the case Codex is mentioning. It would be nice to handle it properly, but for now I am fine with approving it as is.

@xrgzs xrgzs merged commit 88d256d into OpenListTeam:main Jun 12, 2026
14 checks passed
@xrgzs xrgzs added the Module: Server API and protocol changes label Jun 12, 2026
EnterTang pushed a commit to EnterTang/OpenList that referenced this pull request Jul 12, 2026
Redirect S3 GET object requests to direct links when the underlying storage can provide one and proxying is not required.

Redirect eligible S3 PUT object requests to HttpDirect single PUT upload URLs with 307, while falling back to the existing gofakes3 stream path for unsupported uploads.

Allow OneDrive Sharelink direct upload info to use simple content PUT URLs for files within Microsoft's single-upload limit.

Co-authored-by: syscc <syscc@users.noreply.github.com>
Co-authored-by: Codex <codex@openai.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Module: Server API and protocol changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants