Files
uploads3/README.md
2025-10-30 12:19:31 +08:00

95 lines
3.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# uploads3
一个用于批量上传本地目录文件到 S3 兼容对象存储的命令行工具基于 GoFrame minio-go SDK
## 功能特性
- 批量扫描本地目录并保持原有层级结构上传至 S3
- 并发上传默认 `10`可配置最大 `50`
- 通过 `config/local.yaml` 管理多套 S3 配置 MinIO七牛 S3
- 统一路径映射自动将 Windows `\` 转换为对象存储使用的 `/`
## 环境要求
- Go `1.23+`仓库声明了 `toolchain go1.24.8`本地使用 Go 1.23/1.24 均可
- 可访问你的 S3 兼容对象存储 MinIO七牛云 S3
## 安装与构建
- 直接构建Windows/Linux/macOS 均可
- Windows: `go build -o uploads3.exe .`
- Linux/macOS: `go build -o uploads3 .`
- 运行
- Windows: `./uploads3.exe -p <本地目录> -u <S3根路径> -w <并发数>`
- Linux/macOS: `./uploads3 -p <本地目录> -u <S3根路径> -w <并发数>`
可选需安装 GoFrame CLI Make`make build` 会在 `bin/` 下生成各平台二进制
## 配置说明
应用读取 `config/local.yaml` `s3` 配置示例
```yaml
s3:
type: "default" # 当前使用的配置名称default/qiniu/...
default:
provider: "minio"
accessKey: "<你的AccessKey>"
secretKey: "<你的SecretKey>"
address: "<你的S3地址>:<端口>" # 如 minio: ay.cname.com:9000
ssl: false # https 用 true
url: "http://host/bucket/" # 直链或 CDN 前缀,可选,用于拼接访问地址
bucketName: "<桶名>"
qiniu:
provider: "qiniu"
accessKey: "<你的AccessKey>"
secretKey: "<你的SecretKey>"
address: "s3.cn-south-1.qiniucs.com"
ssl: true
url: "https://attachment.example.com/"
bucketName: "<桶名>"
```
- `s3.type` 决定使用哪套配置上例为 `default`
- `address` S3/MinIO 的服务地址`ssl` 选择是否 https
- `bucketName` 是目标桶名上传时的对象 Key 将由本地路径与 `upload_path` 映射生成
## 使用指南
命令行参数
- `-p, --path` 本地文件夹路径必须
- `-u, --upload_path` S3 上传根路径必须
- `-w, --worker` 并发数默认 `10`最大 `50`
运行示例Windows
```
./uploads3.exe -p D:\data\images -u cdn.yoyaworld.com/upload/images -w 20
```
运行示例Linux/macOS
```
./uploads3 -p /data/images -u cdn.yoyaworld.com/upload/images -w 20
```
### 路径映射规则
- 工具会扫描 `path` 下所有文件并以相对层级映射到 `upload_path`
- 对象 Key 生成规则 `upload_path` 替换本地绝对路径中的 `path` 前缀并统一改为 `/`
- 例如
- 本地文件`D:\data\images\a\b.jpg`
- 参数`-p D:\data\images``-u cdn.yoyaworld.com/upload/images`
- 对象 Key`cdn.yoyaworld.com/upload/images/a/b.jpg`
### 并发与性能
- `-w` 控制同时上传的并行 worker 范围 `1~50`
- 大量小文件场景建议适度提高并发网络与目标 S3 的限流会影响实际吞吐
## 日志输出
- 使用 GoFrame 日志默认打印到控制台包含当前上传进度 `(已传/总数)` 与对象 Key
- 失败时会记录错误日志可根据输出排查凭据与网络问题
## 常见问题
- 连接失败检查 `address` `ssl` 是否匹配端口是否可达
- 认证失败核对 `accessKey/secretKey`桶权限与跨区 endpoint 设置
- Key 不符合预期确认命令行的 `path` `upload_path` 是否书写正确尤其是 Windows 路径需要使用转义或用双引号包裹
## 开发者提示
- 入口`main.go` 调用 `internal/cmd/cmd.go` 的命令
- S3 封装`internal/logic/s3/s3.go` 基于 `minio-go` `config/local.yaml` 读取配置
- 若需要扩展不同提供商可在 `config/local.yaml` 增加新节并通过 `s3.type` 切换
## 许可证
- 使用 `MIT` 许可详见 `LICENSE` 文件