pets.create.upload.go 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. package petsLy
  2. import (
  3. "context"
  4. "duoduo/conf"
  5. "duoduo/models/mysqlLy"
  6. "duoduo/tools/app"
  7. "encoding/json"
  8. "fmt"
  9. "github.com/gin-gonic/gin"
  10. "github.com/qiniu/go-sdk/v7/auth/qbox"
  11. "github.com/qiniu/go-sdk/v7/storage"
  12. "github.com/shopspring/decimal"
  13. "os"
  14. "strconv"
  15. "time"
  16. )
  17. func CreateUpload(c *gin.Context) {
  18. confIni, err := conf.ConnIni()
  19. if err != nil {
  20. app.Error(c, 400, err, err.Error())
  21. return
  22. }
  23. form, err := c.MultipartForm()
  24. if err != nil {
  25. app.Error(c, 400, err, err.Error())
  26. return
  27. }
  28. files := form.File["files"]
  29. openId := c.PostForm("open_id")
  30. name := c.PostForm("name")
  31. pet := c.PostForm("pet")
  32. age := c.PostForm("age")
  33. sex := c.PostForm("sex")
  34. petDes := c.PostForm("pet_des")
  35. if openId == "" || name == "" || pet == "" || age == "" || sex == "" || petDes == "" {
  36. app.Error(c, 400, err, "必填字段为空值")
  37. return
  38. }
  39. petStatus := c.PostForm("pet_status")
  40. petStatusN, _ := strconv.Atoi(petStatus)
  41. isSterilization := c.PostForm("is_sterilization")
  42. isSterilizationN, _ := strconv.Atoi(isSterilization)
  43. isExpellingParasite := c.PostForm("is_expelling_parasite")
  44. isExpellingParasiteN, _ := strconv.Atoi(isExpellingParasite)
  45. isImmune := c.PostForm("is_immune")
  46. isImmuneN, _ := strconv.Atoi(isImmune)
  47. isFee := c.PostForm("is_fee")
  48. isFeeN, _ := strconv.Atoi(isFee)
  49. if petStatusN == 0 || isSterilizationN == 0 || isExpellingParasiteN == 0 || isImmuneN == 0 || isFeeN == 0 {
  50. app.Error(c, 400, err, "必填状态为空值")
  51. return
  52. }
  53. deposit := c.PostForm("deposit")
  54. depositDate := c.PostForm("deposit_date")
  55. amount := c.PostForm("amount")
  56. if isFeeN == 2 && (deposit == "" || depositDate == "") {
  57. app.Error(c, 400, err, "押金信息未填写")
  58. return
  59. }
  60. if isFeeN == 3 && amount == "" {
  61. app.Error(c, 400, err, "金额信息未填写")
  62. return
  63. }
  64. province := c.PostForm("province")
  65. city := c.PostForm("city")
  66. area := c.PostForm("area")
  67. petInfo := c.PostForm("pet_info")
  68. adoptInfo := c.PostForm("adopt_info")
  69. if province == "" || city == "" || area == "" || petInfo == "" || adoptInfo == "" {
  70. app.Error(c, 400, err, "必填状态为空值!")
  71. return
  72. }
  73. user := mysqlLy.User{}
  74. user.OpenID = openId
  75. userInfo, err := user.Get()
  76. if err != nil {
  77. app.Error(c, 500, err, "用户信息错误")
  78. return
  79. }
  80. var pictures []string
  81. for _, file := range files {
  82. timeUnixNano := time.Now().UnixNano() //单位纳秒
  83. fileName := fmt.Sprintf("%d-%s.jpg", timeUnixNano, openId)
  84. err := c.SaveUploadedFile(file, "./"+fileName)
  85. if err != nil {
  86. app.Error(c, 500, err, "保存图片失败")
  87. return
  88. }
  89. //七牛云上传图片
  90. //localFile = "/Users/jemy/Documents/github.png"
  91. bucket := "imgxx"
  92. key := "lingyang/" + openId + "/" + fileName
  93. putPolicy := storage.PutPolicy{
  94. Scope: bucket,
  95. }
  96. mac := qbox.NewMac(confIni.MustValue("ly-qn", "access_key"), confIni.MustValue("ly-qn", "secret_key"))
  97. upToken := putPolicy.UploadToken(mac)
  98. cfg := storage.Config{}
  99. // 空间对应的机房
  100. cfg.Zone = &storage.ZoneHuanan
  101. // 是否使用https域名
  102. cfg.UseHTTPS = false
  103. // 上传是否使用CDN上传加速
  104. cfg.UseCdnDomains = false
  105. // 构建表单上传的对象
  106. formUploader := storage.NewFormUploader(&cfg)
  107. ret := storage.PutRet{}
  108. // 可选配置
  109. //putExtra := storage.PutExtra{
  110. // Params: map[string]string{
  111. // "x:name": "github logo",
  112. // },
  113. //}
  114. err = formUploader.PutFile(context.Background(), &ret, upToken, key, "./"+fileName, nil)
  115. if err != nil {
  116. app.Error(c, 500, err, "上传图片失败")
  117. return
  118. }
  119. fmt.Println(ret.Key, ret.Hash)
  120. err = os.Remove("./" + fileName)
  121. if err != nil {
  122. app.Error(c, 500, err, "删除图片失败")
  123. return
  124. }
  125. pictures = append(pictures, "http://lingyang.shisanmiao.com/"+key)
  126. }
  127. sqlData := mysqlLy.Pets{}
  128. sqlData.Province = province
  129. picture, err := json.Marshal(pictures)
  130. if err != nil {
  131. app.Error(c, 500, err, err.Error())
  132. return
  133. }
  134. sqlData.Pictures = string(picture)
  135. sqlData.PetStatus = petStatusN
  136. sqlData.PetInfo = petInfo
  137. sqlData.PetDes = petDes
  138. sqlData.IsSterilization = isSterilizationN
  139. sqlData.IsImmune = isImmuneN
  140. sqlData.IsFee = isFeeN
  141. sqlData.IsExpellingParasite = isExpellingParasiteN
  142. sqlData.DepositDate, _ = time.Parse("2006-01-02", depositDate)
  143. sqlData.Deposit, _ = decimal.NewFromString(deposit)
  144. sqlData.City = city
  145. sqlData.Area = area
  146. sqlData.Age = age
  147. sqlData.AdoptInfo = adoptInfo
  148. sqlData.Amount, _ = decimal.NewFromString(amount)
  149. sqlData.UserID = userInfo.ID
  150. sqlData.Status = 1 //待领养
  151. sqlData.Sex = sex
  152. sqlData.Name = name
  153. sqlData.CreateTime = time.Now().Local()
  154. sqlData.UpdateTime = time.Now().Local()
  155. _, err = sqlData.Create()
  156. if err != nil {
  157. app.Error(c, 500, err, "插入数据失败")
  158. return
  159. }
  160. app.OK(c, nil, "成功")
  161. //OpenId string `json:"open_id" binding:"required"`
  162. //Name string `json:"name" binding:"required"` // 昵称
  163. //Pet string `json:"pet" binding:"required"` // 品种
  164. //Age string `json:"age" binding:"required"` // 年龄 '0-3个月','3-6个月','6-9个月','小于1岁','小于2岁','小于3岁','大于3岁'
  165. //Sex string `json:"sex" binding:"required"` // 性别 MM GG
  166. //PetStatus int `json:"pet_status" binding:"required"` // 1-流浪 2-家养 3-收养所
  167. //PetDes string `json:"pet_des" binding:"required"` // 宠物详细种类
  168. //IsSterilization int `json:"is_sterilization" binding:"required"` // 绝育状态:1-是 2-否 3-不确认
  169. //IsExpellingParasite int `json:"is_expelling_parasite" binding:"required"` // 驱虫状态:1-是 2-否 3-不确认
  170. //IsImmune int `json:"is_immune" binding:"required"` // 免疫状态:1-是 2-否 3-不确认
  171. //IsFee int `json:"is_fee" binding:"required"` // 1-免费 2-押金 3-有偿
  172. //Deposit decimal.Decimal `json:"deposit"` // 押金
  173. //DepositDate time.Time `json:"deposit_date"` // 押金到期时间
  174. //Amount decimal.Decimal `json:"amount" ` // 金额
  175. //Province string `json:"province" binding:"required"` // 省
  176. //City string `json:"city" binding:"required"` // 市
  177. //Area string `json:"area" binding:"required"` // 区
  178. //PetInfo string `json:"pet_info" binding:"required"` // 宠物信息
  179. //AdoptInfo string `json:"adopt_info" binding:"required"` // 领养要求
  180. //Pictures string `json:"pictures"` // 图片url
  181. }