文件上传


GoAdmin默认提供一个本地文件上传引擎,支持将文件上传到服务器。使用需要在全局配置中设置上传的目录,以及上传文件访问的前缀。

  1. package config
  2. // 存储目录:存储头像等上传文件
  3. type Store struct {
  4. Path string // 相对或绝对路径,文件会存储到这里
  5. Prefix string // 访问前缀
  6. }
  7. type Config struct {
  8. ...
  9. // 上传文件存储的位置
  10. Store Store `json:"store"`
  11. // 文件上传引擎
  12. FileUploadEngine FileUploadEngine `json:"file_upload_engine"`
  13. ...
  14. }
  15. type FileUploadEngine struct {
  16. Name string
  17. Config map[string]interface{}
  18. }

如果你想要自定义上传位置,比如上传到又拍云,七牛云等云平台,那么你需要自己写一个上传引擎。下面介绍如何自己写引擎:

引擎的类型

  1. package file
  2. // 上传引擎
  3. type Uploader interface {
  4. Upload(*multipart.Form) error
  5. }
  6. // 上传引擎生成函数
  7. type UploaderGenerator func() Uploader
  8. // 增加引擎接口api
  9. func AddUploader(name string, up UploaderGenerator) {
  10. ...
  11. }

调用

我们需要调用AddUploader方法来增加一个上传引擎,第一个参数是引擎的名字(将在全局配置中用到),第二参数就是引擎生成函数。

假设我们要增加一个七牛云上传引擎,那么可以类似这样:

  1. package main
  2. import (
  3. ...
  4. "github.com/GoAdminGroup/go-admin/modules/file"
  5. ...
  6. )
  7. type QiNiuUploader struct {
  8. Bucket string
  9. Region string
  10. SecretId string
  11. SecretKey string
  12. Prefix string
  13. Path string
  14. }
  15. func (q QiNiuUploader) Upload(*multipart.Form) error {
  16. // 接收一个表单类型,这里实现上传逻辑
  17. }
  18. func main() {
  19. ...
  20. file.AddUploader("qiniu", func() file.Uploader {
  21. return &QiNiuUploader{
  22. Bucket: config.Get().FileUploadEngine.Config["bucket"].(string),
  23. Region: config.Get().FileUploadEngine.Config["region"].(string),
  24. SecretId: config.Get().FileUploadEngine.Config["secret_id"].(string),
  25. SecretKey: config.Get().FileUploadEngine.Config["secret_key"].(string),
  26. Prefix: config.Get().FileUploadEngine.Config["prefix"].(string),
  27. Path: config.Get().FileUploadEngine.Config["path"].(string),
  28. }
  29. })
  30. cfg := config.Config{
  31. ...
  32. FileUploadEngine: config.FileUploadEngine{
  33. Name: "qiniu",
  34. Config: map[string]interface{}{
  35. "bucket": "xxx",
  36. "region": "xxx",
  37. "secret_id": "xxx",
  38. "secret_key": "xxx",
  39. "prefix": "xxx",
  40. "path": "xxx",
  41. },
  42. }
  43. ...
  44. }
  45. ...
  46. }

这样就实现一个七牛云上传文件引擎了!🍺🍺