Browse Source

文件类型swagger的注解书写
用户头像上传 功能完成

pixelqm 5 years ago
parent
commit
25c6fdeee1

+ 14 - 0
QMPlusServer/controller/api/reportformat.go

@@ -0,0 +1,14 @@
+package api
+
+import (
+	"github.com/gin-gonic/gin"
+	"net/http"
+)
+
+func ReportFormat(c *gin.Context, success bool, msg string, json gin.H) {
+	c.JSON(http.StatusOK, gin.H{
+		"success": success,
+		"msg":     msg,
+		"data":    json,
+	})
+}

+ 52 - 36
QMPlusServer/controller/api/user.go

@@ -3,7 +3,14 @@ package api
 import (
 	"fmt"
 	"github.com/gin-gonic/gin"
+	"main/controller/support"
 	"main/model/dbModel"
+	"mime/multipart"
+)
+
+var (
+	USER_HEADER_IMG_PATH string = "http://qmplusimg.henrongyi.top"
+	USER_HEADER_BUCKET   string = "qm-plus-img"
 )
 
 type RegistAndLoginStuct struct {
@@ -24,20 +31,12 @@ func Regist(c *gin.Context) {
 	U := &dbModel.User{UserName: R.UserName, PassWord: R.PassWord}
 	err, user := U.Regist()
 	if err != nil {
-		c.JSON(200, gin.H{
-			"success": false,
-			"msg":     fmt.Sprintf("%v", err),
-			"data": gin.H{
-				"user": user,
-			},
+		ReportFormat(c, false, fmt.Sprintf("%v", err), gin.H{
+			"user": user,
 		})
 	} else {
-		c.JSON(200, gin.H{
-			"success": true,
-			"msg":     "创建成功",
-			"data": gin.H{
-				"user": user,
-			},
+		ReportFormat(c, false, "创建成功", gin.H{
+			"user": user,
 		})
 	}
 }
@@ -53,21 +52,9 @@ func Login(c *gin.Context) {
 	_ = c.BindJSON(&L)
 	U := &dbModel.User{UserName: L.UserName, PassWord: L.PassWord}
 	if err, user := U.Login(); err != nil {
-		c.JSON(200, gin.H{
-			"success": false,
-			"msg":     "用户名密码错误",
-			"data": gin.H{
-				"user": user,
-			},
-		})
+		ReportFormat(c, false, "用户名密码错误", gin.H{"user": user})
 	} else {
-		c.JSON(200, gin.H{
-			"success": true,
-			"msg":     "登录成功",
-			"data": gin.H{
-				"user": user,
-			},
-		})
+		ReportFormat(c, true, "登录成功", gin.H{"user": user})
 	}
 }
 
@@ -88,16 +75,45 @@ func ChangePassWord(c *gin.Context) {
 	_ = c.BindJSON(&params)
 	U := &dbModel.User{UserName: params.UserName, PassWord: params.PassWord}
 	if err, _ := U.ChangePassWord(params.NewPassWord); err != nil {
-		c.JSON(200, gin.H{
-			"success": false,
-			"msg":     "修改失败,请检查用户名密码",
-			"data":    gin.H{},
-		})
+		ReportFormat(c, false, "修改失败,请检查用户名密码", gin.H{})
 	} else {
-		c.JSON(200, gin.H{
-			"success": true,
-			"msg":     "修改成功",
-			"data":    gin.H{},
-		})
+		ReportFormat(c, true, "修改成功", gin.H{})
+	}
+}
+
+type UserHeaderImg struct {
+	HeaderImg multipart.File `json:"headerImg"`
+}
+
+// @Tags User
+// @Summary 用户上传头像
+// @accept multipart/form-data
+// @Produce  application/json
+// @Param headerImg formData file true "用户上传头像"
+// @Param userName formData string true "用户上传头像"
+// @Success 200 {string} json "{"success":true,"data":{},"msg":"上传成功"}"
+// @Router /user/uploadHeaderImg [post]
+func UploadHeaderImg(c *gin.Context) {
+	//获取头像文件
+	_, header, err := c.Request.FormFile("headerImg")
+	//便于找到用户 以后从jwt中取
+	userName := c.PostForm("userName")
+	if err != nil {
+		ReportFormat(c, false, fmt.Sprintf("上传文件失败,%v", err), gin.H{})
+	} else {
+		//文件上传后拿到文件路径
+		err, filePath := support.Upload(header, USER_HEADER_BUCKET, USER_HEADER_IMG_PATH)
+		if err != nil {
+			ReportFormat(c, false, fmt.Sprintf("接收返回值失败,%v", err), gin.H{})
+		} else {
+			//修改数据库后得到修改后的user并且返回供前端使用
+			err, user := new(dbModel.User).UploadHeaderImg(userName, filePath)
+
+			if err != nil {
+				ReportFormat(c, false, fmt.Sprintf("修改数据库链接失败,%v", err), gin.H{})
+			} else {
+				ReportFormat(c, true, "上传成功", gin.H{"user": user})
+			}
+		}
 	}
 }

+ 16 - 8
QMPlusServer/controller/support/upload.go

@@ -1,17 +1,19 @@
 package support
 
 import (
-	"bytes"
+	"context"
+	"fmt"
 	"github.com/qiniu/api.v7/auth/qbox"
 	"github.com/qiniu/api.v7/storage"
 	"mime/multipart"
+	"time"
 )
 
 var accessKey string = "25j8dYBZ2wuiy0yhwShytjZDTX662b8xiFguwxzZ" // 你在七牛云的accessKey
 var secretKey string = "pgdbqEsf7ooZh7W3xokP833h3dZ_VecFXPDeG5JY" // 你在七牛云的secretKey
-var bucket string = "a303176530"                                  // 你七牛云标准空间的名字
-func Upload(file multipart.File) (err error, path string) {
 
+// 接收两个参数 一个文件流 一个 bucket 你的七牛云标准空间的名字
+func Upload(file *multipart.FileHeader, bucket string, urlPath string) (err error, path string) {
 	putPolicy := storage.PutPolicy{
 		Scope: bucket,
 	}
@@ -31,12 +33,18 @@ func Upload(file multipart.File) (err error, path string) {
 			"x:name": "github logo",
 		},
 	}
-	data := []byte("hello, this is qiniu cloud")
-	dataLen := int64(len(data))
-	err := formUploader.Put(context.Background(), &ret, upToken, key, bytes.NewReader(data), dataLen, &putExtra)
+	f, e := file.Open()
+	if e != nil {
+		fmt.Println(e)
+		return e, ""
+	}
+	dataLen := file.Size
+	fileKey := fmt.Sprintf("%d%s", time.Now().Unix(), file.Filename) // 文件名格式 自己可以改 建议保证唯一性
+	err = formUploader.Put(context.Background(), &ret, upToken, fileKey, f, dataLen, &putExtra)
 	if err != nil {
 		fmt.Println(err)
-		return
+		//qmlog.QMLog.Info(err)
+		return err, ""
 	}
-	fmt.Println(ret.Key, ret.Hash)
+	return err, urlPath + "/" + ret.Key
 }

+ 39 - 1
QMPlusServer/docs/docs.go

@@ -1,6 +1,6 @@
 // GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
 // This file was generated by swaggo/swag at
-// 2019-09-03 23:59:41.1295277 +0800 CST m=+0.038362901
+// 2019-09-05 23:15:39.7963441 +0800 CST m=+0.062832501
 
 package docs
 
@@ -118,6 +118,44 @@ var doc = `{
                     }
                 }
             }
+        },
+        "/user/uploadHeaderImg": {
+            "post": {
+                "consumes": [
+                    "multipart/form-data"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "User"
+                ],
+                "summary": "用户上传头像",
+                "parameters": [
+                    {
+                        "type": "file",
+                        "description": "用户上传头像",
+                        "name": "headerImg",
+                        "in": "formData",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "用户上传头像",
+                        "name": "userName",
+                        "in": "formData",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "{\"success\":true,\"data\":{},\"msg\":\"上传成功\"}",
+                        "schema": {
+                            "type": "string"
+                        }
+                    }
+                }
+            }
         }
     },
     "definitions": {

+ 38 - 0
QMPlusServer/docs/swagger.json

@@ -97,6 +97,44 @@
                     }
                 }
             }
+        },
+        "/user/uploadHeaderImg": {
+            "post": {
+                "consumes": [
+                    "multipart/form-data"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "User"
+                ],
+                "summary": "用户上传头像",
+                "parameters": [
+                    {
+                        "type": "file",
+                        "description": "用户上传头像",
+                        "name": "headerImg",
+                        "in": "formData",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "用户上传头像",
+                        "name": "userName",
+                        "in": "formData",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "{\"success\":true,\"data\":{},\"msg\":\"上传成功\"}",
+                        "schema": {
+                            "type": "string"
+                        }
+                    }
+                }
+            }
         }
     },
     "definitions": {

+ 25 - 0
QMPlusServer/docs/swagger.yaml

@@ -79,4 +79,29 @@ paths:
       summary: 用户注册账号
       tags:
       - User
+  /user/uploadHeaderImg:
+    post:
+      consumes:
+      - multipart/form-data
+      parameters:
+      - description: 用户上传头像
+        in: formData
+        name: headerImg
+        required: true
+        type: file
+      - description: 用户上传头像
+        in: formData
+        name: userName
+        required: true
+        type: string
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: '{"success":true,"data":{},"msg":"上传成功"}'
+          schema:
+            type: string
+      summary: 用户上传头像
+      tags:
+      - User
 swagger: "2.0"

+ 7 - 0
QMPlusServer/model/dbModel/user.go

@@ -62,3 +62,10 @@ func (u *User) Login() (err error, userInter *User) {
 	err = qmsql.DEFAULTDB.Where("user_name = ? AND pass_word = ?", u.UserName, u.PassWord).First(&user).Error
 	return err, &user
 }
+
+// 用户头像上传更新地址
+func (u *User) UploadHeaderImg(userName string, filePath string) (err error, userInter *User) {
+	var user User
+	err = qmsql.DEFAULTDB.Where("user_name = ?", userName).First(&user).Update("header_img", filePath).First(&user).Error
+	return err, &user
+}

+ 1 - 0
QMPlusServer/router/user.go

@@ -11,5 +11,6 @@ func InitUserRouter(Router *gin.Engine) {
 		UserRouter.POST("regist", api.Regist)
 		UserRouter.POST("login", api.Login)
 		UserRouter.POST("changePassWord", api.ChangePassWord)
+		UserRouter.POST("uploadHeaderImg", api.UploadHeaderImg)
 	}
 }

BIN
README.md