前端配置与使用
文件上传涉及到前端的地方,大体分为三处
1,参数配置,在系统设置-配置设置-云存储,可以设置是使用本地存储,还是七牛云等云存储,还有一些key和密钥的设置
2, 附件管理,在系统应用-附件管理,可以对附件执行上传,删除等操作,在这里你可以看到已经上传的文件,超管可以通过指定id查看指定用户的文件,个人用户只能看个人的文件
3,最后一个值得关注的就是,具体的使用的地方,比如头像
后端存储配置
配置字段是存储在数据库表中的,hg_sys_config 表, group字段为upload的均为存储配置,运行系统,首先会通过main.go - global.init(ctx) 来初始化加载配置
// internal/global/init.go
// 初始化功能库配置
service.SysConfig().InitConfig(ctx)
这里会连同其他的配置一并加载到内存中,通过group来区分不同的配置,比如微信配置wechat,登录配置login,支付配置pay,附件配置upload等。
附件管理的api,对附件增删改查,就如同其他正常的api一样,分层处理
/api/admin/common/upload.go
/internal/controller/admin/common/upload.go
/api/admin/attachment/attachment.go
/interna/controller/admin/sys/attachment.go
/service...
/logic...
调用上传接口,会一步步,调用到 storager 包下面的接口函数
// internal/library/storager/upload.go
// UploadDrive 存储驱动
type UploadDrive interface {
// Upload 上传
Upload(ctx context.Context, file *ghttp.UploadFile) (fullPath string, err error)
// ...
}
具体的各平台的upload实现,在upload_cos.go, upload_qiniu.go, upload_ucloud.go等这些文件中
// internal/library/storager/upload.go
// New 初始化存储驱动
func New(name ...string) UploadDrive {
// ...
case consts.UploadDriveLocal:
drive = &LocalDrive{}
case consts.UploadDriveUCloud:
drive = &UCloudDrive{}
case consts.UploadDriveCos:
drive = &CosDrive{}
case consts.UploadDriveOss:
drive = &OssDrive{}
case consts.UploadDriveQiNiu:
drive = &QiNiuDrive{}
case consts.UploadDriveMinio:
drive = &MinioDrive{}
// ...
}
// ...
fullPath, err := New(config.Drive).Upload(ctx, file)
通过自定义的New函数和config配置,来生成具体的结构体对象,调用对应文件的上传实现函数。