Skip to content

基于在Amazon S3基础上,实现兼容S3协议其他服务商支持优化,自用修改已完成并测试通过,可供参考 #21

Description

@SoukNow

大佬好,感谢开源该工具。我配置过程中发现,目前仅支持Amazon S3,同类的兼容S3协议的服务商(如腾讯云、七牛云、缤纷云等)不能通过修改Endpoint 来实现。
Go代码之前没写过,得益于vibe coding,我提出思路后让AI帮改了,经过修改及调试后,已经修改并测试成功了。

由于是AI写的代码,也不知道质量能否达到要求,就不直接提交具体代码了,我把关键修改点发出来,可供参考:

为了支持 S3 协议的自定义服务商(如腾讯云、七牛云、缤纷云等),主要修改了以下几个关键位置:

1. 后端核心代码修改 (pkg/storage/aws_s3/s3.go)
在 S3 结构体和初始化逻辑中增加了对 Endpoint 的支持。

结构体 Config 增加字段: 在 Config 结构体中新增了 Endpoint 字段,用于接收 yaml 或数据库中的 endpoint 配置。

type Config struct {
// ... 其他字段
Endpoint string yaml:"endpoint" // [新增]
}

NewClient 函数解析配置: 从传入的配置 map (cf) 中读取 Endpoint 值。

var endpoint string
if v, ok := cf["Endpoint"]; ok && v != nil {
endpoint = v.(string)
}

配置 s3.Client 使用自定义 Endpoint: 在创建 SDK 客户端时 (s3.NewFromConfig),将读取到的 endpoint 赋值给 SDK 的 BaseEndpoint 参数。这是让 SDK 不去连接默认的 AWS 服务器,而是连接第三方服务商。

client := s3.NewFromConfig(cfg, func(o *s3.Options) {
if conf.Endpoint != "" {
o.BaseEndpoint = &conf.Endpoint
}
})

2. 配置文件修改 (config/config.yaml)
在 aws-s3 节点下新增了 endpoint 配置项,可以指定自定义接入点。

3. 前端修改
注入输入框:在 S3 配置表单中,插入了 Endpoint (节点) 的输入框。
作用:如果没有这个修改,在多用户面板中,用户即使想填 Endpoint 也没有地方填,后端收到的永远是空字符串,导致功能不可用。

已经能满足上传和下载的自用要求了,再次感谢大佬。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions