// ofcmgr project main.go package main import ( "encoding/base64" "encoding/json" "log" "net/http" "os" "os/exec" "path/filepath" "runtime" "strings" "syscall" ) type Params struct { Id string DocUrl string } //var httpUrl_Data string = "http://192.168.0.101:10091/api/limsdataentry/dataentrycallback" //var httpUrl_Report string = "http://192.168.0.101:10091/api/createreport/reporteditcallback" var httpUrl_Data string = "http://47.92.212.59:10091/api/limsdataentry/dataentrycallback" var httpUrl_Report string = "http://47.92.212.59:10091/api/createreport/reporteditcallback" var regFilePath string = "D:\\limsdoc\\petrotool.exe" var fileUpServer string = "weed1.labsop.cn:9333" var fileDownServer string = "weed1.labsop.cn:9390" func main() { //创建本地目录 var basePath string if ret, _ := PathExists("D:/"); ret { basePath = "d:/limsdoc" } else { basePath = "c:/limsdoc" regFilePath = "c:\\limsdoc\\petrotool.exe" } if ret, _ := PathExists(basePath); !ret { CreatePath(basePath) } //生成日志文件 //无参数运行,创建注册表 var logfile string if len(os.Args) <= 1 { logfile = "./log.txt" } else { logfile = basePath+"/log.txt" } file, err := os.OpenFile(logfile, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666) defer file.Close() if err != nil { panic("打开文件错误") } log.SetOutput(file) log.SetFlags(log.Lmicroseconds | log.Ldate) log.Println(os.Args) //无参数运行,创建注册表 if len(os.Args) <= 1 { file, err := exec.LookPath(os.Args[0]) if err != nil { return } path, err := filepath.Abs(file) if runtime.GOOS == "windows" { path = strings.Replace(path, "\\", "/", -1) } if _, err := Copy(path, regFilePath); err == nil { log.Println("文件解压成功") log.Println("") //写注册表 registerOp(regFilePath) } else { log.Println("文件解压失败") log.Println("安装失败,请通过右键,以管理员的身份运行,重试安装!") } log.Println("") log.Println("") log.Println("***安装成功后,当前位置的安装文件[petrotool.exe] 和 日志文件[log.txt]已无用,可直接删除***") /*fmt.Println("") fmt.Println("") fmt.Println("请按回车键[ENTER]退出......") var ret string fmt.Scanln(&ret)*/ return } params := getParams(os.Args[1]) log.Println(params) retUrlByte, err := base64.RawURLEncoding.DecodeString(params["furl"]) retUrl := string(retUrlByte) log.Println("retUrl = ", retUrl) log.Println("retUrl err = ", err) fileNameByte, err := base64.RawURLEncoding.DecodeString(params["fname"]) fileName := string(fileNameByte) log.Println("fileName = ", fileName) log.Println("fileName err = ", err) docType := params["doctype"] entityId := params["id"] action := params["act"] if action == "edit" { //localFileName := entityId + "_" + fileName _dir := basePath + "/" + docType //下载文件到本地目录 var downloadUrl string if strings.Contains(retUrl, "http://") { downloadUrl = retUrl } else { downloadUrl = "http://" + retUrl } log.Println("downloadUrl=", downloadUrl) DownloadFile(downloadUrl, fileName, _dir) if strings.Contains(runtime.GOOS, "windows") { cmd := exec.Command("CMD", "/c", _dir+"/"+fileName) cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} err := cmd.Start() log.Println("打开文档: err = ", err) } } else if action == "up" { token := params["token"] //先上传文件 //localFileName := entityId + "_" + fileName docPath := basePath + "/" + docType + "/" + fileName retDocUrl, _ := uploadFile(docPath, fileUpServer, fileDownServer) params := Params{ Id: entityId, DocUrl: retDocUrl, } //再post调用接口,告诉服务器 jsonByte, _ := json.Marshal(params) if docType == "data" { upfileRequest(httpUrl_Data, string(jsonByte), token) } else if docType == "report" { upfileRequest(httpUrl_Report, string(jsonByte), token) } } else if action == "cancel" { log.Println("取消操作: 准备备份文件-", fileName) localFile := basePath + "/" + docType + "/" + fileName _dirCancel := basePath + "/cancel" distFile := _dirCancel + "/" + docType + "_" + fileName if ret, _ := PathExists(_dirCancel); !ret { CreatePath(_dirCancel) } err := os.Rename(localFile, distFile) log.Println("备份文件err=", err) } } func upfileRequest(url string, params string, token string) { client := &http.Client{} req, err := http.NewRequest("POST", url, strings.NewReader(params)) req.Header.Add("Content-Type", "application/json") req.Header.Add("Authorization", "Bearer "+token) resp, err := client.Do(req) if err != nil { log.Println("err= ", err) } log.Println("resp= ", resp) }