Beego不提供七牛云代理加速,需通过配置storage.Config启用CDN上传(UseCdnDomains=true)、HTTPS(UseHTTPS=true)及匹配Zone,并手动拼接domain+key生成可访问URL。

Beego 本身不提供「七牛云代理加速」的内置配置项,所谓“代理加速”其实是误用概念——七牛云的 CDN 加速是通过 Domain(自定义或默认域名)直接回源到空间,并非 Beego 做反向代理。你真正需要的是:**让 Beego 上传文件后,返回带 CDN 域名的可访问 URL,且上传过程走七牛推荐的机房与协议策略**。
下面直奔实操:
确认七牛 SDK 版本和 import 路径
别用已废弃的 github.com/qiniu/api.v7(v7 已归档),必须用官方维护的 github.com/qiniu/go-sdk/v7。否则 PutFile 等方法签名不兼容,会报 undefined: storage.FormUploader 或 cannot use &cfg (type *storage.Config) as type *storage.Config 这类类型错。
- 执行安装命令:
go get github.com/qiniu/go-sdk/v7 - import 时写全路径:
import "github.com/qiniu/go-sdk/v7/storage",不是qiniu/api.v7或qiniu/api - v7 的
storage.Config和storage.PutPolicy都在同一个包下,别混用旧版结构体
app.conf 中配好凭证和空间信息
app.conf 只负责存敏感配置,不参与逻辑。关键字段必须小写、无空格、无引号:
accesskey = your_access_key_heresecretkey = your_secret_key_herebucket = your_bucket_name-
domain = https://your-bucket-name.oss-cn-shanghai.aliyuncs.com← 错!这是阿里云格式;正确应为七牛的 CDN 域名,如https://cdn.example.com或http://xxx.qiniup.com - 务必检查
domain是否已绑定到对应bucket并已开启 CDN(后台「空间设置 → 域名管理」里确认)
上传时启用 CDN 加速和 HTTPS
加速行为由 storage.Config 控制,不是靠 Beego 中间件或反向代理。重点看两个字段:
-
cfg.UseHTTPS = true:强制走 HTTPS,否则即使 domain 写了https://,SDK 内部仍可能发 HTTP 请求(尤其在测试环境) -
cfg.UseCdnDomains = true:启用 CDN 域名上传(即上传请求发往 CDN 节点,再由 CDN 回源到七牛机房),能显著提升大文件上传速度 -
cfg.Zone必须匹配 bucket 所在区域,比如华东区用&storage.ZoneHuadong,写错会导致PutFile: context deadline exceeded或 400 错误
示例片段:
cfg := storage.Config{
Zone: &storage.ZoneHuadong,
UseHTTPS: true,
UseCdnDomains: true,
}
formUploader := storage.NewFormUploader(&cfg)
Beego Controller 里拼接可访问 URL 要自己做
七牛上传成功后只返回 key(文件名),Beego 不会自动拼 domain + key。你得从 app.conf 读出 domain,再手动拼接:
- 用
beego.AppConfig.String("domain")获取配置值 - 注意末尾是否带
/:若domain = "https://cdn.example.com",拼 URL 时要写domain + "/" + key,否则变成https://cdn.example.comavatar.jpg - 不要依赖
ret.Key直接当 URL 返回,它只是存储路径,不是可访问地址
常见翻车点:前端拿到 key 后自己拼 domain,但没处理 URL 编码,遇到中文或特殊字符就 404。
七牛的「加速」完全在服务端配置和 SDK 参数里,Beego 只是调用方。最容易被忽略的是 Zone 和 UseCdnDomains 搭配失效——开了 UseCdnDomains 却没设对 Zone,上传请求会卡住或失败,日志里看不到明显错误,只能抓包看请求发去了哪个 IP。











