S3 兼容对象存储
适用于 AWS S3,以及提供兼容 API 的 COS、OSS、MinIO 等服务。
| 字段 | 说明 |
|---|---|
| Access Key / Secret Key | 访问凭据 |
| Bucket | 已存在的桶名称 |
| Region | 服务区域;AWS 通常必填 |
| Endpoint | 兼容服务的 API 地址;AWS 可按环境留空 |
| Path style | 使用 endpoint/bucket/key,MinIO 等服务常需开启 |
| 代理上传/下载 | 强制内容经过 go-drive |
| 自定义请求头 | 添加到 go-drive 服务端所发请求的额外请求头 |
| 缓存 TTL | 条目缓存时间 |
凭据至少需要目标桶的列举、读取、写入、复制和删除对象权限。建议为 go-drive 创建专用最小权限账号。
自定义请求头
部分 S3 兼容服务要求客户端携带标识请求头,例如自定义 User-Agent,此时可使用“自定义请求头”。这些请求头仅在 go-drive 向存储服务发出 HTTP 请求时添加,不会写入预签名 URL,也不会改变直传行为。
关闭上传或下载代理时,对应的文件传输由浏览器完成,不会携带这里配置的请求头。如果存储服务要求上传或下载请求必须携带它们,请开启对应的代理选项。
配置值会覆盖请求构造过程中较早生成的请求头。S3 签名在其后执行,可能再次覆盖 Authorization 等由签名流程控制的请求头。不能配置 Host、Content-Length 等连接控制请求头。请求头值会作为普通 Drive 配置存储和返回,不会进行秘密遮罩。
浏览器直传的 CORS
关闭代理上传/下载时,浏览器会直接访问 S3。桶的 CORS 至少需要允许 go-drive 站点域名使用:
- 上传:
PUT、POST,请求头content-type、x-amz-content-sha256,暴露etag。 - 下载:
GET、HEAD。
AWS 示例:
json
[
{
"AllowedHeaders": ["content-type", "x-amz-content-sha256"],
"AllowedMethods": ["PUT", "POST"],
"AllowedOrigins": ["https://drive.example.com"],
"ExposeHeaders": ["etag"]
},
{
"AllowedHeaders": [],
"AllowedMethods": ["GET", "HEAD"],
"AllowedOrigins": ["https://drive.example.com"],
"ExposeHeaders": []
}
]同时把站点域名加入对象存储的 Referer/防盗链白名单。不要在生产环境使用 * 代替明确域名和请求头。
常见问题
HeadBucket失败:检查 endpoint、region、DNS、证书和凭据权限。- 兼容服务出现地址错误:切换 path-style。
- 网页上传失败但后台复制成功:通常是 CORS 或防盗链,而不是 S3 凭据。
- 内网站点无法访问云端直链:启用代理上传/下载。