From 5367a813e4c2406b8d4c3c024180b1e524e2817c Mon Sep 17 00:00:00 2001 From: kgdxpr Date: Tue, 6 Jul 2021 15:25:59 +0800 Subject: [PATCH] update --- dsCommonTools/.idea/workspace.xml | 7 +- .../MinIORelateController.go | 100 ++++++++++++++++-- .../MinIORelateDao/MinIORelateDao.go | 28 +++++ dsCommonTools/Config/Config.ini | 5 + dsCommonTools/Utils/CommonUtil/CommonUtil.go | 13 +++ dsCommonTools/Utils/ConfigUtil/ConfigUtil.go | 10 ++ dsCommonTools/Utils/RedisUtil/RedisUtil.go | 49 +++++++++ dsCommonTools/go.mod | 1 + dsCommonTools/go.sum | 2 + 9 files changed, 202 insertions(+), 13 deletions(-) create mode 100644 dsCommonTools/Business/MinIORelate/MinIORelateDao/MinIORelateDao.go create mode 100644 dsCommonTools/Utils/RedisUtil/RedisUtil.go diff --git a/dsCommonTools/.idea/workspace.xml b/dsCommonTools/.idea/workspace.xml index 6ca9790d..77e8fec4 100644 --- a/dsCommonTools/.idea/workspace.xml +++ b/dsCommonTools/.idea/workspace.xml @@ -2,13 +2,10 @@ - - - - + - + diff --git a/dsCommonTools/Business/MinIORelate/MinIORelateController/MinIORelateController.go b/dsCommonTools/Business/MinIORelate/MinIORelateController/MinIORelateController.go index c064a5af..66e50b52 100644 --- a/dsCommonTools/Business/MinIORelate/MinIORelateController/MinIORelateController.go +++ b/dsCommonTools/Business/MinIORelate/MinIORelateController/MinIORelateController.go @@ -1,11 +1,13 @@ package MinIORelateController import ( + "dsCommonTools/Business/MinIORelate/MinIORelateDao" "dsCommonTools/Utils/CommonUtil" "dsCommonTools/Utils/ConfigUtil" "dsCommonTools/Utils/MinioUtil" "dsCommonTools/Utils/ObsUtil" "dsCommonTools/Utils/ObsUtil/obs" + "dsCommonTools/Utils/RedisUtil" "fmt" "github.com/gin-gonic/gin" "github.com/minio/minio-go/v6" @@ -21,19 +23,93 @@ func Routers(r *gin.RouterGroup) { rr.GET("/getPostPolicyInfo", getPostPolicyInfo) rr.GET("/GeneratePreviewUrl", GeneratePreviewUrl) + rr.GET("/SaveFileInfo", SaveFileInfo) return } +/** +功能:前台直传文件成功后,保存上传文件相间信息 +作者:吴缤 +日期:2021-07-06 +*/ +func SaveFileInfo(c *gin.Context) { + id := c.Query("id") + if id == "" { + c.JSON(http.StatusOK, gin.H{"success": false, "info": "文件id参数不允许为空!"}) + return + } + systemId := c.Query("systemid") + if systemId == "" { + c.JSON(http.StatusOK, gin.H{"success": false, "info": "系统ID不允许为空!"}) + return + } + + redisFileMap := RedisUtil.HMGETALL("file_" + id) + + if len(redisFileMap) == 0 { + c.JSON(http.StatusOK, gin.H{"success": false, "info": "文件id不存在!"}) + return + } + + fileKey := redisFileMap["key"] + fileOriginName := redisFileMap["origin_name"] + fileUrlPrefix := redisFileMap["url"] + fileBucket := redisFileMap["bucket"] + + minioClient, err := MinioUtil.GetMinioClient() + if err != nil { + c.JSON(http.StatusOK, gin.H{"success": false, "info": "minio无法连接!"}) + return + } + + //获取文件信息 + objInfo, objErr := minioClient.StatObject(fileBucket, fileKey, minio.StatObjectOptions{}) + if objErr != nil { + c.JSON(http.StatusOK, gin.H{"success": false, "info": "在存储中未找到文件!"}) + return + } + + fileSize := CommonUtil.ConvertInt64ToString(objInfo.Size) + fileMd5 := objInfo.ETag + + fileMap := make(map[string]string) + fileMap["id"] = id + fileMap["origin_name"] = fileOriginName + fileMap["storage_key"] = fileKey + fileMap["storage_bucket"] = fileBucket + fileMap["storage_url_prefix"] = fileUrlPrefix + fileMap["file_size"] = fileSize + fileMap["file_md5"] = fileMd5 + fileMap["system_id"] = systemId + + insertErr := MinIORelateDao.InsertFileInfo(fileMap) + if insertErr != nil { + c.JSON(http.StatusOK, gin.H{"success": false, "info": "写入数据库失败!"}) + return + } + //删除redis中的信息 + RedisUtil.DEL("file_" + id) + + c.JSON(http.StatusOK, gin.H{"success": true, "info": "成功!"}) + +} + /** 功能:生成预览地址 作者:吴缤 日期:2021-07-05 */ func GeneratePreviewUrl(c *gin.Context) { - key := c.Query("key") - if key == "" { - c.JSON(http.StatusOK, gin.H{"success": false, "info": "key参数不允许为空!"}) + id := c.Query("id") + if id == "" { + c.JSON(http.StatusOK, gin.H{"success": false, "info": "id参数不允许为空!"}) + return + } + + key, err := MinIORelateDao.GetFileKey(id) + if err != nil { + c.JSON(http.StatusOK, gin.H{"success": false, "info": "获取存储中的key异常!" + err.Error()}) return } @@ -85,12 +161,13 @@ func GeneratePreviewUrl(c *gin.Context) { 日期:2021-07-05 */ func getPostPolicyInfo(c *gin.Context) { - filename := c.Query("filename") - if filename == "" { + fileName := c.Query("filename") + if fileName == "" { c.JSON(http.StatusOK, gin.H{"success": false, "info": "文件名称不允许为空!"}) return } - extension := path.Ext(filename) + + extension := path.Ext(fileName) minioClient, err := MinioUtil.GetMinioClient() if err != nil { @@ -99,12 +176,12 @@ func getPostPolicyInfo(c *gin.Context) { } //生成一个文件名 - objectKey := CommonUtil.GetUUID() + id := CommonUtil.GetUUID() policy := minio.NewPostPolicy() //Bucket名称 policy.SetBucket(ConfigUtil.MinioBucket) - policy.SetKey(objectKey[0:2] + "/" + objectKey + extension) + policy.SetKey(id[0:2] + "/" + id + extension) //1天有效期 policy.SetExpires(time.Now().UTC().AddDate(0, 0, 1)) url, formData, err := minioClient.PresignedPostPolicy(policy) @@ -117,6 +194,13 @@ func getPostPolicyInfo(c *gin.Context) { policyMap[strings.Replace(k, "-", "_", -1)] = v } policyMap["url"] = fmt.Sprintf("%s", url) + policyMap["id"] = id + policyMap["origin_name"] = fileName + //将生产的签名存入redis中,以备后用 + RedisUtil.HMSET("file_"+id, policyMap) + //设置redis中的KEY有效期为1个小时 + RedisUtil.EXPIRE("file_"+id, 3600) + policyMap["success"] = true c.JSON(http.StatusOK, policyMap) diff --git a/dsCommonTools/Business/MinIORelate/MinIORelateDao/MinIORelateDao.go b/dsCommonTools/Business/MinIORelate/MinIORelateDao/MinIORelateDao.go new file mode 100644 index 00000000..1bffb6f1 --- /dev/null +++ b/dsCommonTools/Business/MinIORelate/MinIORelateDao/MinIORelateDao.go @@ -0,0 +1,28 @@ +package MinIORelateDao + +import ( + "dsCommonTools/Utils/DbUtil" +) + +var db = DbUtil.Engine + +func TestSqlJson() (string, error) { + sql := "select * from t_complaint_info" + results, err := db.SQL(sql).Query().Json() + return results, err +} + +func InsertFileInfo(fileMap map[string]string) error { + sql := "insert into t_base_file (id, origin_name, storage_key, storage_bucket, storage_url_prefix, file_size, file_md5, system_id)" + + " values (?,?,?,?,?,?,?,?)" + _, err := db.Exec(sql, fileMap["id"], fileMap["origin_name"], fileMap["storage_key"], fileMap["storage_bucket"], fileMap["storage_url_prefix"], fileMap["file_size"], fileMap["file_md5"], fileMap["system_id"]) + return err +} + +func GetFileKey(id string) (string, error) { + sql := "select storage_key from t_base_file where id=?" + var key string + _, err := db.SQL(sql, id).Get(&key) + return key, err + +} diff --git a/dsCommonTools/Config/Config.ini b/dsCommonTools/Config/Config.ini index fdb692e0..bb986a26 100644 --- a/dsCommonTools/Config/Config.ini +++ b/dsCommonTools/Config/Config.ini @@ -22,6 +22,11 @@ db_name = base_db_dev user = root pwd = DsideaL147258369 +[redis] +ip = 10.10.14.175 +port = 18890 +db = 0 + #minio配置 [minio] minio_endpoint = 10.10.14.231:9000 diff --git a/dsCommonTools/Utils/CommonUtil/CommonUtil.go b/dsCommonTools/Utils/CommonUtil/CommonUtil.go index 912e9bc6..a6e2c61e 100644 --- a/dsCommonTools/Utils/CommonUtil/CommonUtil.go +++ b/dsCommonTools/Utils/CommonUtil/CommonUtil.go @@ -7,6 +7,7 @@ import ( "fmt" uuid "github.com/satori/go.uuid" "os" + "strconv" "strings" ) @@ -61,3 +62,15 @@ func JsonStringToMap(jsonStr string) (map[string]string, error) { } return m, nil } + +//将字符串转为int32整数 +func ConvertStringToInt32(s string) int32 { + i, _ := strconv.Atoi(s) + return int32(i) +} + +//将整数64转为字符串 +func ConvertInt64ToString(i int64) string { + s := strconv.FormatInt(i, 10) + return s +} diff --git a/dsCommonTools/Utils/ConfigUtil/ConfigUtil.go b/dsCommonTools/Utils/ConfigUtil/ConfigUtil.go index 407b4bf2..4d4eed19 100644 --- a/dsCommonTools/Utils/ConfigUtil/ConfigUtil.go +++ b/dsCommonTools/Utils/ConfigUtil/ConfigUtil.go @@ -28,6 +28,11 @@ var ( MysqlUser string MysqlPwd string + //REDIS配置 + RedisIp string + RedisPort string + RedisDb string + //minio MinioEndPoint string MinioAccessKeyId string @@ -96,6 +101,11 @@ func init() { MysqlUser = iniParser.GetString("mysql", "user") MysqlPwd = iniParser.GetString("mysql", "pwd") + //读取redis配置 + RedisIp = iniParser.GetString("redis", "ip") + RedisPort = iniParser.GetString("redis", "port") + RedisDb = iniParser.GetString("redis", "db") + //minio MinioEndPoint = iniParser.GetString("minio", "minio_endpoint") MinioAccessKeyId = iniParser.GetString("minio", "minio_accessKeyId") diff --git a/dsCommonTools/Utils/RedisUtil/RedisUtil.go b/dsCommonTools/Utils/RedisUtil/RedisUtil.go new file mode 100644 index 00000000..5c67f020 --- /dev/null +++ b/dsCommonTools/Utils/RedisUtil/RedisUtil.go @@ -0,0 +1,49 @@ +package RedisUtil + +import ( + "dsCommonTools/Utils/ConfigUtil" + "github.com/go-redis/redis" + "time" +) + +var ( + RedisClient *redis.Client + RedisHost string + RedisDb int +) + +func init() { + // 从配置文件获取redis的ip以及db + RedisHost = ConfigUtil.RedisIp + ":" + ConfigUtil.RedisPort + RedisClient = redis.NewClient(&redis.Options{ + Addr: RedisHost, + DB: 0, // use default DB + }) +} + +func SET(key string, value string, expiration time.Duration) { + RedisClient.Set(key, value, expiration*time.Second) +} + +func GET(key string) (string, error) { + val, err := RedisClient.Get(key).Result() + return val, err + +} + +func EXPIRE(key string, expiration time.Duration) { + RedisClient.Expire(key, expiration*time.Second) +} + +func DEL(key string) { + RedisClient.Del(key) +} + +func HMSET(key string, fields map[string]interface{}) { + RedisClient.HMSet(key, fields) +} + +func HMGETALL(key string) map[string]string { + resMap, _ := RedisClient.HGetAll(key).Result() + return resMap +} diff --git a/dsCommonTools/go.mod b/dsCommonTools/go.mod index 93c924bb..ba35b41d 100644 --- a/dsCommonTools/go.mod +++ b/dsCommonTools/go.mod @@ -12,6 +12,7 @@ require ( github.com/fatih/structs v1.1.0 // indirect github.com/fsnotify/fsnotify v1.4.9 // indirect github.com/gin-gonic/gin v1.7.2 // indirect + github.com/go-redis/redis v6.15.9+incompatible // indirect github.com/go-sql-driver/mysql v1.6.0 // indirect github.com/minio/minio-go/v6 v6.0.57 // indirect github.com/satori/go.uuid v1.2.0 // indirect diff --git a/dsCommonTools/go.sum b/dsCommonTools/go.sum index 29cdce6b..9f0915ea 100644 --- a/dsCommonTools/go.sum +++ b/dsCommonTools/go.sum @@ -30,6 +30,8 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87 github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= +github.com/go-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg= +github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=