package petsLy import ( "context" "duoduo/conf" "duoduo/models/mysqlLy" "duoduo/tools/app" "encoding/json" "fmt" "github.com/gin-gonic/gin" "github.com/qiniu/go-sdk/v7/auth/qbox" "github.com/qiniu/go-sdk/v7/storage" "github.com/shopspring/decimal" "os" "strconv" "time" ) func CreateUpload(c *gin.Context) { confIni, err := conf.ConnIni() if err != nil { app.Error(c, 400, err, err.Error()) return } form, err := c.MultipartForm() if err != nil { app.Error(c, 400, err, err.Error()) return } files := form.File["files"] openId := c.PostForm("open_id") name := c.PostForm("name") pet := c.PostForm("pet") age := c.PostForm("age") sex := c.PostForm("sex") petDes := c.PostForm("pet_des") if openId == "" || name == "" || pet == "" || age == "" || sex == "" || petDes == "" { app.Error(c, 400, err, "必填字段为空值") return } petStatus := c.PostForm("pet_status") petStatusN, _ := strconv.Atoi(petStatus) isSterilization := c.PostForm("is_sterilization") isSterilizationN, _ := strconv.Atoi(isSterilization) isExpellingParasite := c.PostForm("is_expelling_parasite") isExpellingParasiteN, _ := strconv.Atoi(isExpellingParasite) isImmune := c.PostForm("is_immune") isImmuneN, _ := strconv.Atoi(isImmune) isFee := c.PostForm("is_fee") isFeeN, _ := strconv.Atoi(isFee) if petStatusN == 0 || isSterilizationN == 0 || isExpellingParasiteN == 0 || isImmuneN == 0 || isFeeN == 0 { app.Error(c, 400, err, "必填状态为空值") return } deposit := c.PostForm("deposit") depositDate := c.PostForm("deposit_date") amount := c.PostForm("amount") if isFeeN == 2 && (deposit == "" || depositDate == "") { app.Error(c, 400, err, "押金信息未填写") return } if isFeeN == 3 && amount == "" { app.Error(c, 400, err, "金额信息未填写") return } province := c.PostForm("province") city := c.PostForm("city") area := c.PostForm("area") petInfo := c.PostForm("pet_info") adoptInfo := c.PostForm("adopt_info") if province == "" || city == "" || area == "" || petInfo == "" || adoptInfo == "" { app.Error(c, 400, err, "必填状态为空值!") return } user := mysqlLy.User{} user.OpenID = openId userInfo, err := user.Get() if err != nil { app.Error(c, 500, err, "用户信息错误") return } var pictures []string for _, file := range files { timeUnixNano := time.Now().UnixNano() //单位纳秒 fileName := fmt.Sprintf("%d-%s.jpg", timeUnixNano, openId) err := c.SaveUploadedFile(file, "./"+fileName) if err != nil { app.Error(c, 500, err, "保存图片失败") return } //七牛云上传图片 //localFile = "/Users/jemy/Documents/github.png" bucket := "imgxx" key := "lingyang/" + openId + "/" + fileName putPolicy := storage.PutPolicy{ Scope: bucket, } mac := qbox.NewMac(confIni.MustValue("ly-qn", "access_key"), confIni.MustValue("ly-qn", "secret_key")) upToken := putPolicy.UploadToken(mac) cfg := storage.Config{} // 空间对应的机房 cfg.Zone = &storage.ZoneHuanan // 是否使用https域名 cfg.UseHTTPS = false // 上传是否使用CDN上传加速 cfg.UseCdnDomains = false // 构建表单上传的对象 formUploader := storage.NewFormUploader(&cfg) ret := storage.PutRet{} // 可选配置 //putExtra := storage.PutExtra{ // Params: map[string]string{ // "x:name": "github logo", // }, //} err = formUploader.PutFile(context.Background(), &ret, upToken, key, "./"+fileName, nil) if err != nil { app.Error(c, 500, err, "上传图片失败") return } fmt.Println(ret.Key, ret.Hash) err = os.Remove("./" + fileName) if err != nil { app.Error(c, 500, err, "删除图片失败") return } pictures = append(pictures, "http://lingyang.shisanmiao.com/"+key) } sqlData := mysqlLy.Pets{} sqlData.Province = province picture, err := json.Marshal(pictures) if err != nil { app.Error(c, 500, err, err.Error()) return } sqlData.Pictures = string(picture) sqlData.PetStatus = petStatusN sqlData.PetInfo = petInfo sqlData.PetDes = petDes sqlData.IsSterilization = isSterilizationN sqlData.IsImmune = isImmuneN sqlData.IsFee = isFeeN sqlData.IsExpellingParasite = isExpellingParasiteN sqlData.DepositDate, _ = time.Parse("2006-01-02", depositDate) sqlData.Deposit, _ = decimal.NewFromString(deposit) sqlData.City = city sqlData.Area = area sqlData.Age = age sqlData.AdoptInfo = adoptInfo sqlData.Amount, _ = decimal.NewFromString(amount) sqlData.UserID = userInfo.ID sqlData.Status = 1 //待领养 sqlData.Sex = sex sqlData.Name = name sqlData.CreateTime = time.Now().Local() sqlData.UpdateTime = time.Now().Local() _, err = sqlData.Create() if err != nil { app.Error(c, 500, err, "插入数据失败") return } app.OK(c, nil, "成功") //OpenId string `json:"open_id" binding:"required"` //Name string `json:"name" binding:"required"` // 昵称 //Pet string `json:"pet" binding:"required"` // 品种 //Age string `json:"age" binding:"required"` // 年龄 '0-3个月','3-6个月','6-9个月','小于1岁','小于2岁','小于3岁','大于3岁' //Sex string `json:"sex" binding:"required"` // 性别 MM GG //PetStatus int `json:"pet_status" binding:"required"` // 1-流浪 2-家养 3-收养所 //PetDes string `json:"pet_des" binding:"required"` // 宠物详细种类 //IsSterilization int `json:"is_sterilization" binding:"required"` // 绝育状态:1-是 2-否 3-不确认 //IsExpellingParasite int `json:"is_expelling_parasite" binding:"required"` // 驱虫状态:1-是 2-否 3-不确认 //IsImmune int `json:"is_immune" binding:"required"` // 免疫状态:1-是 2-否 3-不确认 //IsFee int `json:"is_fee" binding:"required"` // 1-免费 2-押金 3-有偿 //Deposit decimal.Decimal `json:"deposit"` // 押金 //DepositDate time.Time `json:"deposit_date"` // 押金到期时间 //Amount decimal.Decimal `json:"amount" ` // 金额 //Province string `json:"province" binding:"required"` // 省 //City string `json:"city" binding:"required"` // 市 //Area string `json:"area" binding:"required"` // 区 //PetInfo string `json:"pet_info" binding:"required"` // 宠物信息 //AdoptInfo string `json:"adopt_info" binding:"required"` // 领养要求 //Pictures string `json:"pictures"` // 图片url }