package business import ( "fmt" "log" "net/http" "os" "os/exec" "strconv" "strings" "time" "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding" "github.com/google/uuid" "device-manage/app/admin/models/busmodels" "device-manage/tools" "device-manage/tools/app" ) var aaptCmd string = "/home/jen/workspace/tools/apktool_2.4.1/prebuilt/linux/aapt dump badging " func GetUpgradeFileList(c *gin.Context) { var upgradeData busmodels.BusUpgradeFile var err error var params busmodels.QueryUpgradeParams err = c.MustBindWith(¶ms, binding.JSON) pageSize := params.PageSize pageIndex := params.PageIndex gids := params.Gids upgradeData.FileName = params.FileName upgradeData.AppId = params.AppId result, count, err := upgradeData.GetPage(pageSize, pageIndex, gids) tools.HasError(err, "", -1) app.PageOK(c, result, count, pageIndex, pageSize, "") } func InsertVersion(c *gin.Context) { var device busmodels.BusApplication err := c.BindWith(&device, binding.JSON) tools.HasError(err, "非法数据格式", 500) device.CreateBy = tools.GetUserIdStr(c) id, err := device.Insert() fmt.Println(id) tools.HasError(err, "添加失败", 500) app.OK(c, id, "添加成功") } func GetVersion(c *gin.Context) { var data busmodels.BusApplication data.AppId, _ = tools.StringToInt(c.Param("appId")) result, err := data.Get() tools.HasError(err, "抱歉未找到相关信息", -1) var res app.Response res.Data = result c.JSON(http.StatusOK, res.ReturnOK()) } //更新之前,应该先获取当前选项的数据, 得到 id以后才好i修改. func UpdateUpgradeFile(c *gin.Context) { var data busmodels.BusApplication err := c.Bind(&data) fmt.Println(data) tools.HasError(err, "数据解析失败", -1) data.UpdateBy = tools.GetUserIdStr(c) fmt.Println(data) result, err := data.Update(data.AppId) tools.HasError(err, "修改失败", 500) app.OK(c, result, "修改成功") } func DeleteUpgradeFile(c *gin.Context) { var data busmodels.BusUpgradeFile data.UpdateBy = tools.GetUserIdStr(c) IDS := tools.IdsStrToIdsIntGroup("upgradefileId", c) fmt.Println(IDS) result, err := data.BatchDelete(IDS) tools.HasError(err, "删除失败", 500) app.OK(c, result, "删除成功") } //web 端上传升级文件,应用和配置等 func UploadUpgradeFile(c *gin.Context) { upgradeInfo := busmodels.BusUpgradeFile{} //获取文件头 file, err := c.FormFile("file") upgradeInfo.Remark, _ = c.GetPostForm("remark") appid, _ := c.GetPostForm("appId") upgradeInfo.AppId, _ = strconv.Atoi(appid) fmt.Println(upgradeInfo.VersionName) fmt.Println(upgradeInfo.Remark) if err != nil { fmt.Println(err) c.String(http.StatusBadRequest, "请求失败:%s", err) return } fileArry := strings.Split(file.Filename, ".") if len(fileArry) <= 0 { c.String(http.StatusBadRequest, "请求失败,文件格式错误.") return } fileType := fileArry[len(fileArry)-1] if err = upgradeInfo.UploadFileCheck(fileType); err != nil { c.String(http.StatusBadRequest, "请求失败:%s", err) return } upgradeInfo.Uid = uuid.NewString() upgradeInfo.Size = strconv.FormatInt(file.Size, 10) upgradeInfo.FileName = file.Filename destName := upgradeInfo.Uid destPath := "files/appfiles/" + upgradeInfo.Uid[0:2] + "/" + upgradeInfo.Uid[2:4] finalPath := destPath + "/" + destName fmt.Println("文件名 :", destName) fmt.Println("文件路径:", destPath) //保存文件到服务器本地 //SaveUploadedFile(文件头,保存路径) if _, err := os.Stat(destPath); err != nil { if err = os.MkdirAll(destPath, os.ModePerm); err != nil { fmt.Println(err) c.String(http.StatusBadRequest, "保存失败 Error:%s", err.Error()) return } } if _, err := os.Stat(finalPath); err != nil { if _, err = os.Create(finalPath); err != nil { fmt.Println(err) c.String(http.StatusBadRequest, "保存失败 Error:%s", err.Error()) return } } if err := c.SaveUploadedFile(file, finalPath); err != nil { c.String(http.StatusBadRequest, "保存失败 Error:%s", err.Error()) return } if fileType == "apk" { command := aaptCmd + finalPath cmd := exec.Command("/bin/bash", "-c", command) bytes, err := cmd.Output() if err != nil { log.Println(err) } resp := string(bytes) log.Println(resp) var strSplit []string = strings.Split(resp, "\n") var strSplit1 = strings.Split(strSplit[0], " ") var verName = strings.Split(strSplit1[3], "'") upgradeInfo.VersionName = verName[1] log.Println(upgradeInfo.VersionName) var pkgName = strings.Split(strSplit1[1], "'") upgradeInfo.PkgName = pkgName[1] log.Println(upgradeInfo.PkgName) var sdk = strings.Split(strSplit[1], "'") upgradeInfo.SdkVersion = sdk[1] } upgradeInfo.CreateBy = tools.GetUserIdStr(c) upgradeInfo.UpdateBy = tools.GetUserIdStr(c) var time time.Time = time.Now() upgradeInfo.CreatedAt = time upgradeInfo.UpdatedAt = time if _, err := upgradeInfo.Insert(); err != nil { c.String(http.StatusBadRequest, "数据存入失败 Error:%s", err.Error()) } app.OK(c, "添加成功", "") } //web 端下载应用和配置文件 func DownloadUpgradeFile(c *gin.Context) { var fileInfo busmodels.BusUpgradeFile fileInfo.Uid = c.Query("uid") fileDir := "files/appfiles" + "/" + fileInfo.Uid[0:2] + "/" + fileInfo.Uid[2:4] finalPath := fileDir + "/" + fileInfo.Uid fmt.Println("文件路径:", finalPath) //打开文件 if _, err := os.Open(finalPath); err != nil { c.Redirect(http.StatusFound, "/404") return } if err := fileInfo.GetFileInfo(); err != nil { c.Redirect(http.StatusFound, "/404") return } fmt.Println("文件名 :", fileInfo.FileName) c.Header("Content-Type", "application/octet-stream") c.Header("Content-Disposition", "attachment; filename="+fileInfo.FileName) c.Header("Content-Transfer-Encoding", "binary") c.File(finalPath) return } //设备端下载应用和配置文件 func DeviceDownloadUpgradeFile(c *gin.Context) { var fileInfo busmodels.BusUpgradeFile fileInfo.Uid = c.Query("uid") fileDir := "files/appfiles" + "/" + fileInfo.Uid[0:2] + "/" + fileInfo.Uid[2:4] finalPath := fileDir + "/" + fileInfo.Uid fmt.Println("文件路径:", finalPath) //打开文件 if _, err := os.Open(finalPath); err != nil { c.Redirect(http.StatusFound, "/404") return } if err := fileInfo.GetFileInfo(); err != nil { c.Redirect(http.StatusFound, "/404") return } fmt.Println("文件名 :", fileInfo.FileName) c.Header("Content-Type", "application/octet-stream") c.Header("Content-Disposition", "attachment; filename="+fileInfo.FileName) c.Header("Content-Transfer-Encoding", "binary") c.File(finalPath) return }