From 3be7d482a96ec55ea9c7b3540b90c67df19770a2 Mon Sep 17 00:00:00 2001 From: yxh Date: Tue, 17 Mar 2020 22:53:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=BE=E7=89=87=E6=96=87=E4=BB=B6=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=EF=BC=8C=E5=90=88=E6=B3=95=E6=80=A7=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controller/admin/upload.go | 40 +++++++ app/service/admin/params_service/params.go | 5 + app/service/admin/upload_service/upload.go | 117 +++++++++++++++++++-- test/demo2_test.go | 6 +- 4 files changed, 155 insertions(+), 13 deletions(-) diff --git a/app/controller/admin/upload.go b/app/controller/admin/upload.go index a4e9358..fae88b1 100644 --- a/app/controller/admin/upload.go +++ b/app/controller/admin/upload.go @@ -9,6 +9,7 @@ import ( type Upload struct{} +//单图片上传 func (c *Upload) UpImg(r *ghttp.Request) { upFile := r.GetUploadFile("file") info, err := upload_service.UpImg(upFile) @@ -20,3 +21,42 @@ func (c *Upload) UpImg(r *ghttp.Request) { } response.SusJson(true, r, "上传成功", res) } + +//批量上传图片 +func (c *Upload) UpImgs(r *ghttp.Request) { + upFiles := r.GetUploadFiles("file") + infos, err := upload_service.UpImgs(upFiles) + if err != nil { + response.FailJson(true, r, "上传失败,"+err.Error()) + } + res := g.Map{ + "fileInfos": infos, + } + response.SusJson(true, r, "上传成功", res) +} + +//单文件上传 +func (c *Upload) UpFile(r *ghttp.Request) { + upFile := r.GetUploadFile("file") + info, err := upload_service.UpFile(upFile) + if err != nil { + response.FailJson(true, r, "上传失败,"+err.Error()) + } + res := g.Map{ + "fileInfo": info, + } + response.SusJson(true, r, "上传成功", res) +} + +//批量上传文件 +func (c *Upload) UpFiles(r *ghttp.Request) { + upFiles := r.GetUploadFiles("file") + infos, err := upload_service.UpFiles(upFiles) + if err != nil { + response.FailJson(true, r, "上传失败,"+err.Error()) + } + res := g.Map{ + "fileInfos": infos, + } + response.SusJson(true, r, "上传成功", res) +} diff --git a/app/service/admin/params_service/params.go b/app/service/admin/params_service/params.go index 8daf1a6..3daad51 100644 --- a/app/service/admin/params_service/params.go +++ b/app/service/admin/params_service/params.go @@ -3,6 +3,7 @@ package params_service import ( "gfast/app/model/admin/sys_config" "gfast/app/service/cache_service" + "github.com/gogf/gf/errors/gerror" ) //保存参数 @@ -42,6 +43,10 @@ func DeleteByIds(ids []int) error { //通过key获取参数 func GetConfigByKey(key string) (config *sys_config.Entity, err error) { + if key == "" { + err = gerror.New("参数key不能为空") + return + } cache := cache_service.New() cf := cache.Get(key) if cf != nil { diff --git a/app/service/admin/upload_service/upload.go b/app/service/admin/upload_service/upload.go index 6717d7f..ff04b83 100644 --- a/app/service/admin/upload_service/upload.go +++ b/app/service/admin/upload_service/upload.go @@ -12,28 +12,61 @@ import ( "github.com/gogf/gf/util/gconv" ) +const upPath = "/pub_upload/" + var uploadPath string //上传得文件信息 type FileInfo struct { - FileName string - FileSize int64 - FileUrl string - fileType string + FileName string `json:"fileName"` + FileSize int64 `json:"fileSize"` + FileUrl string `json:"fileUrl"` + FileType string `json:"fileType"` } func init() { - uploadPath = g.Cfg().GetString("server.ServerRoot") + "/pub_upload/" + uploadPath = g.Cfg().GetString("server.ServerRoot") + upPath } //上传图片 func UpImg(file *ghttp.UploadFile) (fileInfo *FileInfo, err error) { + return upByType(file, "img") +} + +//上传文件 +func UpFile(file *ghttp.UploadFile) (fileInfo *FileInfo, err error) { + return upByType(file, "file") +} + +//批量上传图片 +func UpImgs(files []*ghttp.UploadFile) (fileInfos []*FileInfo, err error) { + return UpBathByType(files, "img") +} + +//批量上传文件 +func UpFiles(files []*ghttp.UploadFile) (fileInfos []*FileInfo, err error) { + return UpBathByType(files, "file") +} + +//文件上传 img|file +func upByType(file *ghttp.UploadFile, fType string) (fileInfo *FileInfo, err error) { if file == nil { err = gerror.New("未上传任何文件") return } + var ( + typeKey string + sizeKey string + ) + if fType == "img" { + typeKey = "sys.uploadFile.imageType" + sizeKey = "sys.uploadFile.imageSize" + } else if fType == "file" { + typeKey = "sys.uploadFile.fileType" + sizeKey = "sys.uploadFile.fileSize" + } //获取上传类型配置 - config, err := getUpConfig("sys.uploadFile.imageType") + config, err := getUpConfig(typeKey) if err != nil { return } @@ -44,7 +77,7 @@ func UpImg(file *ghttp.UploadFile) (fileInfo *FileInfo, err error) { return } //获取上传大小配置 - config, err = getUpConfig("sys.uploadFile.imageSize") + config, err = getUpConfig(sizeKey) if err != nil { return } @@ -53,7 +86,7 @@ func UpImg(file *ghttp.UploadFile) (fileInfo *FileInfo, err error) { return } if !rightSize { - gerror.New("上传文件超过最大尺寸:" + config.ConfigValue) + err = gerror.New("上传文件超过最大尺寸:" + config.ConfigValue) return } path := getUpPath() @@ -65,7 +98,69 @@ func UpImg(file *ghttp.UploadFile) (fileInfo *FileInfo, err error) { FileName: file.Filename, FileSize: file.Size, FileUrl: getUrl(path, fileName), - fileType: file.Header.Get("Content-type"), + FileType: file.Header.Get("Content-type"), + } + return +} + +//批量上传 img|file +func UpBathByType(files []*ghttp.UploadFile, fType string) (fileInfos []*FileInfo, err error) { + if len(files) == 0 { + err = gerror.New("未上传任何文件") + return + } + var ( + typeKey string + sizeKey string + ) + if fType == "img" { + typeKey = "sys.uploadFile.imageType" + sizeKey = "sys.uploadFile.imageSize" + } else if fType == "file" { + typeKey = "sys.uploadFile.fileType" + sizeKey = "sys.uploadFile.fileSize" + } + //获取上传类型配置 + configType, err := getUpConfig(typeKey) + if err != nil { + return + } + //获取上传大小配置 + configSize, err := getUpConfig(sizeKey) + if err != nil { + return + } + for _, file := range files { + //检测文件类型 + rightType := checkFileType(file.Filename, configType.ConfigValue) + if !rightType { + err = gerror.New("上传文件类型错误,只能包含后缀为:" + configType.ConfigValue + "的文件。") + return + } + var rightSize bool + rightSize, err = checkSize(configSize.ConfigValue, file.Size) + if err != nil { + return + } + if !rightSize { + err = gerror.New("上传文件超过最大尺寸:" + configSize.ConfigValue) + return + } + } + path := getUpPath() + for _, file := range files { + var fileName string + fileName, err = file.Save(path, true) + if err != nil { + return + } + fileInfo := &FileInfo{ + FileName: file.Filename, + FileSize: file.Size, + FileUrl: getUrl(path, fileName), + FileType: file.Header.Get("Content-type"), + } + fileInfos = append(fileInfos, fileInfo) } return } @@ -111,7 +206,7 @@ func getUpConfig(key string) (config *sys_config.Entity, err error) { //判断上传文件类型是否合法 func checkFileType(fileName, typeString string) bool { - suffix := gstr.SubStr(fileName, gstr.Pos(fileName, ".")+1) + suffix := gstr.SubStr(fileName, gstr.SearchArray(gstr.Split(fileName, ""), ".")+1) imageType := gstr.Split(typeString, ",") rightType := false for _, v := range imageType { @@ -129,6 +224,6 @@ func getUpPath() (upPath string) { } func getUrl(path, fileName string) string { - url := gstr.SubStr(path, gstr.Pos(path, "/pub_upload/")+1) + fileName + url := gstr.SubStr(path, gstr.Pos(path, upPath)+1) + fileName return url } diff --git a/test/demo2_test.go b/test/demo2_test.go index 326f20a..e1118c2 100644 --- a/test/demo2_test.go +++ b/test/demo2_test.go @@ -2,7 +2,7 @@ package test import ( "fmt" - "github.com/gogf/gf/os/gtime" + "github.com/gogf/gf/text/gstr" "testing" ) @@ -11,5 +11,7 @@ func TestDemo2(t *testing.T) { } func test21(t *testing.T) { - fmt.Println(gtime.Date()) + str := "字s符s串.中文测试" + fmt.Println(gstr.SearchArray(gstr.Split(str, ""), ".")) + fmt.Println(gstr.SubStr(str, gstr.SearchArray(gstr.Split(str, ""), ".")+1)) }