upgradeFile.go 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. package business
  2. import (
  3. "fmt"
  4. "log"
  5. "net/http"
  6. "os"
  7. "os/exec"
  8. "strconv"
  9. "strings"
  10. "time"
  11. "github.com/gin-gonic/gin"
  12. "github.com/gin-gonic/gin/binding"
  13. "github.com/google/uuid"
  14. "device-manage/app/admin/models/busmodels"
  15. "device-manage/tools"
  16. "device-manage/tools/app"
  17. )
  18. var aaptCmd string = "/home/jen/workspace/tools/apktool_2.4.1/prebuilt/linux/aapt dump badging "
  19. func GetUpgradeFileList(c *gin.Context) {
  20. var upgradeData busmodels.BusUpgradeFile
  21. var err error
  22. var params busmodels.QueryUpgradeParams
  23. err = c.MustBindWith(&params, binding.JSON)
  24. pageSize := params.PageSize
  25. pageIndex := params.PageIndex
  26. gids := params.Gids
  27. upgradeData.FileName = params.FileName
  28. upgradeData.AppId = params.AppId
  29. result, count, err := upgradeData.GetPage(pageSize, pageIndex, gids)
  30. tools.HasError(err, "", -1)
  31. app.PageOK(c, result, count, pageIndex, pageSize, "")
  32. }
  33. func InsertVersion(c *gin.Context) {
  34. var device busmodels.BusApplication
  35. err := c.BindWith(&device, binding.JSON)
  36. tools.HasError(err, "非法数据格式", 500)
  37. device.CreateBy = tools.GetUserIdStr(c)
  38. id, err := device.Insert()
  39. fmt.Println(id)
  40. tools.HasError(err, "添加失败", 500)
  41. app.OK(c, id, "添加成功")
  42. }
  43. func GetVersion(c *gin.Context) {
  44. var data busmodels.BusApplication
  45. data.AppId, _ = tools.StringToInt(c.Param("appId"))
  46. result, err := data.Get()
  47. tools.HasError(err, "抱歉未找到相关信息", -1)
  48. var res app.Response
  49. res.Data = result
  50. c.JSON(http.StatusOK, res.ReturnOK())
  51. }
  52. //更新之前,应该先获取当前选项的数据, 得到 id以后才好i修改.
  53. func UpdateUpgradeFile(c *gin.Context) {
  54. var data busmodels.BusApplication
  55. err := c.Bind(&data)
  56. fmt.Println(data)
  57. tools.HasError(err, "数据解析失败", -1)
  58. data.UpdateBy = tools.GetUserIdStr(c)
  59. fmt.Println(data)
  60. result, err := data.Update(data.AppId)
  61. tools.HasError(err, "修改失败", 500)
  62. app.OK(c, result, "修改成功")
  63. }
  64. func DeleteUpgradeFile(c *gin.Context) {
  65. var data busmodels.BusUpgradeFile
  66. data.UpdateBy = tools.GetUserIdStr(c)
  67. IDS := tools.IdsStrToIdsIntGroup("upgradefileId", c)
  68. fmt.Println(IDS)
  69. result, err := data.BatchDelete(IDS)
  70. tools.HasError(err, "删除失败", 500)
  71. app.OK(c, result, "删除成功")
  72. }
  73. //web 端上传升级文件,应用和配置等
  74. func UploadUpgradeFile(c *gin.Context) {
  75. upgradeInfo := busmodels.BusUpgradeFile{}
  76. //获取文件头
  77. file, err := c.FormFile("file")
  78. upgradeInfo.Remark, _ = c.GetPostForm("remark")
  79. appid, _ := c.GetPostForm("appId")
  80. upgradeInfo.AppId, _ = strconv.Atoi(appid)
  81. fmt.Println(upgradeInfo.VersionName)
  82. fmt.Println(upgradeInfo.Remark)
  83. if err != nil {
  84. fmt.Println(err)
  85. c.String(http.StatusBadRequest, "请求失败:%s", err)
  86. return
  87. }
  88. fileArry := strings.Split(file.Filename, ".")
  89. if len(fileArry) <= 0 {
  90. c.String(http.StatusBadRequest, "请求失败,文件格式错误.")
  91. return
  92. }
  93. fileType := fileArry[len(fileArry)-1]
  94. if err = upgradeInfo.UploadFileCheck(fileType); err != nil {
  95. c.String(http.StatusBadRequest, "请求失败:%s", err)
  96. return
  97. }
  98. upgradeInfo.Uid = uuid.NewString()
  99. upgradeInfo.Size = strconv.FormatInt(file.Size, 10)
  100. upgradeInfo.FileName = file.Filename
  101. destName := upgradeInfo.Uid
  102. destPath := "files/appfiles/" + upgradeInfo.Uid[0:2] + "/" + upgradeInfo.Uid[2:4]
  103. finalPath := destPath + "/" + destName
  104. fmt.Println("文件名 :", destName)
  105. fmt.Println("文件路径:", destPath)
  106. //保存文件到服务器本地
  107. //SaveUploadedFile(文件头,保存路径)
  108. if _, err := os.Stat(destPath); err != nil {
  109. if err = os.MkdirAll(destPath, os.ModePerm); err != nil {
  110. fmt.Println(err)
  111. c.String(http.StatusBadRequest, "保存失败 Error:%s", err.Error())
  112. return
  113. }
  114. }
  115. if _, err := os.Stat(finalPath); err != nil {
  116. if _, err = os.Create(finalPath); err != nil {
  117. fmt.Println(err)
  118. c.String(http.StatusBadRequest, "保存失败 Error:%s", err.Error())
  119. return
  120. }
  121. }
  122. if err := c.SaveUploadedFile(file, finalPath); err != nil {
  123. c.String(http.StatusBadRequest, "保存失败 Error:%s", err.Error())
  124. return
  125. }
  126. if fileType == "apk" {
  127. command := aaptCmd + finalPath
  128. cmd := exec.Command("/bin/bash", "-c", command)
  129. bytes, err := cmd.Output()
  130. if err != nil {
  131. log.Println(err)
  132. }
  133. resp := string(bytes)
  134. log.Println(resp)
  135. var strSplit []string = strings.Split(resp, "\n")
  136. var strSplit1 = strings.Split(strSplit[0], " ")
  137. var verName = strings.Split(strSplit1[3], "'")
  138. upgradeInfo.VersionName = verName[1]
  139. log.Println(upgradeInfo.VersionName)
  140. var pkgName = strings.Split(strSplit1[1], "'")
  141. upgradeInfo.PkgName = pkgName[1]
  142. log.Println(upgradeInfo.PkgName)
  143. var sdk = strings.Split(strSplit[1], "'")
  144. upgradeInfo.SdkVersion = sdk[1]
  145. }
  146. upgradeInfo.CreateBy = tools.GetUserIdStr(c)
  147. upgradeInfo.UpdateBy = tools.GetUserIdStr(c)
  148. var time time.Time = time.Now()
  149. upgradeInfo.CreatedAt = time
  150. upgradeInfo.UpdatedAt = time
  151. if _, err := upgradeInfo.Insert(); err != nil {
  152. c.String(http.StatusBadRequest, "数据存入失败 Error:%s", err.Error())
  153. }
  154. app.OK(c, "添加成功", "")
  155. }
  156. //web 端下载应用和配置文件
  157. func DownloadUpgradeFile(c *gin.Context) {
  158. var fileInfo busmodels.BusUpgradeFile
  159. fileInfo.Uid = c.Query("uid")
  160. fileDir := "files/appfiles" + "/" + fileInfo.Uid[0:2] + "/" + fileInfo.Uid[2:4]
  161. finalPath := fileDir + "/" + fileInfo.Uid
  162. fmt.Println("文件路径:", finalPath)
  163. //打开文件
  164. if _, err := os.Open(finalPath); err != nil {
  165. c.Redirect(http.StatusFound, "/404")
  166. return
  167. }
  168. if err := fileInfo.GetFileInfo(); err != nil {
  169. c.Redirect(http.StatusFound, "/404")
  170. return
  171. }
  172. fmt.Println("文件名 :", fileInfo.FileName)
  173. c.Header("Content-Type", "application/octet-stream")
  174. c.Header("Content-Disposition", "attachment; filename="+fileInfo.FileName)
  175. c.Header("Content-Transfer-Encoding", "binary")
  176. c.File(finalPath)
  177. return
  178. }
  179. //设备端下载应用和配置文件
  180. func DeviceDownloadUpgradeFile(c *gin.Context) {
  181. var fileInfo busmodels.BusUpgradeFile
  182. fileInfo.Uid = c.Query("uid")
  183. fileDir := "files/appfiles" + "/" + fileInfo.Uid[0:2] + "/" + fileInfo.Uid[2:4]
  184. finalPath := fileDir + "/" + fileInfo.Uid
  185. fmt.Println("文件路径:", finalPath)
  186. //打开文件
  187. if _, err := os.Open(finalPath); err != nil {
  188. c.Redirect(http.StatusFound, "/404")
  189. return
  190. }
  191. if err := fileInfo.GetFileInfo(); err != nil {
  192. c.Redirect(http.StatusFound, "/404")
  193. return
  194. }
  195. fmt.Println("文件名 :", fileInfo.FileName)
  196. c.Header("Content-Type", "application/octet-stream")
  197. c.Header("Content-Disposition", "attachment; filename="+fileInfo.FileName)
  198. c.Header("Content-Transfer-Encoding", "binary")
  199. c.File(finalPath)
  200. return
  201. }