diff --git a/dsSzxy/.idea/workspace.xml b/dsSzxy/.idea/workspace.xml index ae9f8f91..4249a746 100644 --- a/dsSzxy/.idea/workspace.xml +++ b/dsSzxy/.idea/workspace.xml @@ -5,7 +5,11 @@ + + + + diff --git a/dsSzxy/Business/FileRelate/FileRelateController/FileReleateController.go b/dsSzxy/Business/FileRelate/FileRelateController/FileReleateController.go index fd1938bf..7909d4ee 100644 --- a/dsSzxy/Business/FileRelate/FileRelateController/FileReleateController.go +++ b/dsSzxy/Business/FileRelate/FileRelateController/FileReleateController.go @@ -1 +1,138 @@ package FileRelateController + +import ( + "bytes" + "dsSzxy/Business/FileRelate/FileRelateDao" + "dsSzxy/Utils/CommonUtil" + "dsSzxy/Utils/ConfigUtil" + "dsSzxy/Utils/MinioUtil" + "encoding/base64" + "fmt" + "github.com/disintegration/imaging" + "github.com/gin-gonic/gin" + "github.com/minio/minio-go/v6" + "io/ioutil" + "log" + "net/http" + "os" + "strings" +) + +// Routers 模块的路由配置 +func Routers(r *gin.RouterGroup) { + rr := r.Group("/fileRelate") + //文件表 + rr.POST("/fileUpload", fileUpload) + //rr.POST("/fileRecord", fileRecord) + //rr.POST("/fileUpdate", fileUpdate) + //rr.POST("/fileCopy", fileCopy) + //树型结构 + +} + +//文件上传 +func fileUpload(c *gin.Context) { + file, err := c.FormFile("file") + if err != nil { + c.String(http.StatusBadRequest, fmt.Sprintf("get form err: %s", err.Error())) + return + } + //扩展名 + ext := CommonUtil.Ext(file.Filename) + ext = strings.ToLower(ext) + //真实文件名 + uuid := CommonUtil.GetUUID() + //子目录 + p := ConfigUtil.SavePath + uuid[0:2] + exist := CommonUtil.Exists(p) + if !exist { + os.Mkdir(p, os.ModePerm) + } + + trueName := uuid + ext + filename := p + "/" + trueName + if err := c.SaveUploadedFile(file, filename); err != nil { + c.String(http.StatusBadRequest, fmt.Sprintf("upload file err: %s", err.Error())) + return + } + + //文件大小 + content, err := ioutil.ReadFile(filename) + if err == nil { + fmt.Println("file size is ", len(content)) + } + size := len(content) + + // 初使化 minio client对象。 + minioClient, err := MinioUtil.GetMinioClient() + if err != nil { + c.JSON(http.StatusOK, gin.H{"success": false, "info": "minio无法连接!"}) + return + } + + // 使用FPutObject上传一个zip文件。 + contentType := "application/octet-stream" + _, err = minioClient.FPutObject(ConfigUtil.MinioBucket, trueName[0:2]+"/"+trueName, filename, minio.PutObjectOptions{ContentType: contentType}) + if err != nil { + log.Fatalln(err) + } + + //记录数据库 + identityId := CommonUtil.ConvertStringToInt32(c.PostForm("identity_id")) + personId := CommonUtil.ConvertStringToInt32(c.PostForm("person_id")) + targetGroupId := CommonUtil.ConvertStringToInt32(c.PostForm("target_group_id")) + targetIdentityId := CommonUtil.ConvertStringToInt32(c.PostForm("target_identity_id")) + targetPersonId := CommonUtil.ConvertStringToInt32(c.PostForm("target_person_id")) + systemId := CommonUtil.ConvertStringToInt32(c.PostForm("system_id")) + FileRelateDao.FileRecord(filename, identityId, personId, targetGroupId, targetIdentityId, targetPersonId, systemId, int32(size), ext) + //返回 + s := FileRelateDao.GetFileDownLoadUrl(trueName[0:2]+"/"+trueName, file.Filename) + originUrl := ConfigUtil.MinioDownloadPrefix + ConfigUtil.MinioBucket + "/" + trueName[0:2] + "/" + trueName + + //判断扩展名是不是图片 + if ext == ".jpg" || ext == ".jpeg" || ext == ".png" || ext == ".bmp" { + //读取本地文件 + imgData, _ := ioutil.ReadFile(filename) + buf := bytes.NewBuffer(imgData) + image, err := imaging.Decode(buf) + if err != nil { + fmt.Println(err) + return + } + //生成缩略图 + image = imaging.Resize(image, 0, 150, imaging.Lanczos) + thumbFileName := uuid + "_thumb" + ext + thumbTrueName := p + "/" + thumbFileName + err = imaging.Save(image, thumbTrueName) + if err != nil { + fmt.Println(err) + } + + //读入生成图片的base64编码 + ff, _ := os.Open(thumbTrueName) + defer ff.Close() + sourceBuffer := make([]byte, 500000) + n, _ := ff.Read(sourceBuffer) + //base64压缩 + sourceString := base64.StdEncoding.EncodeToString(sourceBuffer[:n]) + //删除原始文件 + os.Remove(filename) + //删除缩略图文件 + os.Remove(thumbTrueName) + c.JSON(200, gin.H{ + "success": true, + "originUrl": originUrl, + "url": s, + "thumbContent": sourceString, + "size": size, + }) + } else { + //删除原始文件 + os.Remove(filename) + c.JSON(200, gin.H{ + "success": true, + "url": s, + "size": size, + }) + } +} diff --git a/dsSzxy/Business/FileRelate/FileRelateDao/FileReleateDao.go b/dsSzxy/Business/FileRelate/FileRelateDao/FileReleateDao.go index 02a7b671..3347bb3f 100644 --- a/dsSzxy/Business/FileRelate/FileRelateDao/FileReleateDao.go +++ b/dsSzxy/Business/FileRelate/FileRelateDao/FileReleateDao.go @@ -1 +1,62 @@ package FileRelateDao + +import ( + "dsSzxy/Utils/CommonUtil" + "dsSzxy/Utils/ConfigUtil" + "dsSzxy/Utils/DbUtil" + "dsSzxy/models" + "errors" + "net/url" + "time" +) + +var db = DbUtil.Engine + +/** +功能:生成下载地址带中文名 +*/ +func GetFileDownLoadUrl(key string, originName string) string { + infix := "?response-content-disposition=attachment%3BfileName%2A%3DUTF-8%27%27" + downloadUrl := ConfigUtil.MinioDownloadPrefix + ConfigUtil.MinioBucket + "/" + key + infix + url.QueryEscape(url.QueryEscape(originName)) + return downloadUrl +} + +//文件记录 +func FileRecord(fileName string, indentityId int32, personId int32, targetGroupId int32, tIdentityId int32, tPersonId int32, systemId int32, fileSize int32, extName string) { + var model models.TZhxyFile + model.FileId = CommonUtil.GetUUID() + model.FileName = fileName + model.FileSize = fileSize + model.BaseId = "-1" + model.BUse = 1 + model.ExtName = extName + model.SystemId = systemId + model.TargetGroupId = targetGroupId + model.TargetIdentityId = tIdentityId + model.TargetPersonId = tPersonId + model.UploadIndentityId = indentityId + model.UploadPersonId = personId + model.UploadTime = time.Now() + c, err := GetFileTypeByExtName(extName) + if err == nil { + model.TypeId = c + } else { + model.TypeId = 0 + } + db.Insert(model) +} + +/** +功能:获取文件扩展名对应的类型ID +*/ +func GetFileTypeByExtName(extName string) (int32, error) { + sql := "select type_id from t_zhxy_file_type_ext where ext_name=?" + res, err := DbUtil.Engine.SQL(sql, extName).Query().List() + if err != nil { + return -1, errors.New("查询SQL语句失败!") + } + if len(res) == 0 { + return 0, nil + } + return res[0]["type_id"].(int32), nil +} diff --git a/dsSzxy/Business/ImRelate/ImRelateController/ImRelateController.go b/dsSzxy/Business/ImRelate/ImRelateController/ImRelateController.go index eb272d50..a1116362 100644 --- a/dsSzxy/Business/ImRelate/ImRelateController/ImRelateController.go +++ b/dsSzxy/Business/ImRelate/ImRelateController/ImRelateController.go @@ -1,135 +1,11 @@ package ImRelateController import ( - "bytes" - "dsSzxy/Utils/CommonUtil" - "dsSzxy/Utils/ConfigUtil" - "dsSzxy/Utils/MinioUtil" - "encoding/base64" - "fmt" - "github.com/disintegration/imaging" "github.com/gin-gonic/gin" - "github.com/minio/minio-go/v6" - "io/ioutil" - "log" - "net/http" - "net/url" - "os" - "strings" ) //模块的路由配置 func Routers(r *gin.RouterGroup) { - rr := r.Group("/imRelate") - rr.POST("/fileUpload", fileUpload) -} - - - -//聊天中的文件上传 -func fileUpload(c *gin.Context) { - file, err := c.FormFile("file") - if err != nil { - c.String(http.StatusBadRequest, fmt.Sprintf("get form err: %s", err.Error())) - return - } - //扩展名 - ext := CommonUtil.Ext(file.Filename) - ext = strings.ToLower(ext) - //真实文件名 - uuid := CommonUtil.GetUUID() - //子目录 - p := ConfigUtil.SavePath + uuid[0:2] - exist := CommonUtil.Exists(p) - if !exist { - os.Mkdir(p, os.ModePerm) - } - - trueName := uuid + ext - filename := p + "/" + trueName - if err := c.SaveUploadedFile(file, filename); err != nil { - c.String(http.StatusBadRequest, fmt.Sprintf("upload file err: %s", err.Error())) - return - } - - //文件大小 - content, err := ioutil.ReadFile(filename) - if err == nil { - fmt.Println("file size is ", len(content)) - } - size := len(content) - - // 初使化 minio client对象。 - minioClient, err := MinioUtil.GetMinioClient() - if err != nil { - c.JSON(http.StatusOK, gin.H{"success": false, "info": "minio无法连接!"}) - return - } - - // 使用FPutObject上传一个zip文件。 - contentType := "application/octet-stream" - _, err = minioClient.FPutObject(ConfigUtil.MinioBucket, trueName[0:2]+"/"+trueName, filename, minio.PutObjectOptions{ContentType: contentType}) - if err != nil { - log.Fatalln(err) - } - - //返回 - s := getFileDownLoadUrl(trueName[0:2]+"/"+trueName, file.Filename) - originUrl := ConfigUtil.MinioDownloadPrefix + ConfigUtil.MinioBucket + "/" + trueName[0:2] + "/" + trueName - - //判断扩展名是不是图片 - if ext == ".jpg" || ext == ".jpeg" || ext == ".png" || ext == ".bmp" { - //读取本地文件 - imgData, _ := ioutil.ReadFile(filename) - buf := bytes.NewBuffer(imgData) - image, err := imaging.Decode(buf) - if err != nil { - fmt.Println(err) - return - } - //生成缩略图 - image = imaging.Resize(image, 0, 150, imaging.Lanczos) - thumbFileName := uuid + "_thumb" + ext - thumbTrueName := p + "/" + thumbFileName - err = imaging.Save(image, thumbTrueName) - if err != nil { - fmt.Println(err) - } - - //读入生成图片的base64编码 - ff, _ := os.Open(thumbTrueName) - defer ff.Close() - sourceBuffer := make([]byte, 500000) - n, _ := ff.Read(sourceBuffer) - //base64压缩 - sourceString := base64.StdEncoding.EncodeToString(sourceBuffer[:n]) - //删除原始文件 - os.Remove(filename) - //删除缩略图文件 - os.Remove(thumbTrueName) - c.JSON(200, gin.H{ - "success": true, - "originUrl": originUrl, - "url": s, - "thumbContent": sourceString, - "size": size, - }) - } else { - //删除原始文件 - os.Remove(filename) - c.JSON(200, gin.H{ - "success": true, - "url": s, - "size": size, - }) - } -} - -/** -功能:生成下载地址带中文名 -*/ -func getFileDownLoadUrl(key string, originName string) string { - infix := "?response-content-disposition=attachment%3BfileName%2A%3DUTF-8%27%27" - downloadUrl := ConfigUtil.MinioDownloadPrefix + ConfigUtil.MinioBucket + "/" + key + infix + url.QueryEscape(url.QueryEscape(originName)) - return downloadUrl + //rr := r.Group("/imRelate") + //rr.POST("/fileUpload", fileUpload) } diff --git a/dsSzxy/Router/Router.go b/dsSzxy/Router/Router.go index 0b909495..f2f48ae2 100644 --- a/dsSzxy/Router/Router.go +++ b/dsSzxy/Router/Router.go @@ -2,6 +2,7 @@ package Router import ( "dsSzxy/Business/CaptchaRelate/CaptchaController" + "dsSzxy/Business/FileRelate/FileRelateController" "dsSzxy/Business/ImRelate/ImRelateController" "dsSzxy/Business/MinIORelate/MinIORelateController" "github.com/gin-gonic/gin" @@ -17,8 +18,6 @@ func GinRouter(r *gin.Engine) { ImRelateController.Routers(rr) //Captcha CaptchaController.Routers(rr) - //文件 - - + FileRelateController.Routers(rr) }