func UploadDevice(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { w.Header().Add("Content-type", "text/html; charset=utf-8") r.ParseForm() file, handle, err := r.FormFile("file") if err != nil { w.Write([]byte("{\"Message\":\"" + err.Error() + "\",\"Status\":\"error\"}")) return } cd, err := iconv.Open("UTF-8", "GBK") if err != nil { w.Write([]byte("{\"Message\":\"" + err.Error() + "\",\"Status\":\"error\"}")) return } defer cd.Close() dir := "/tmp/cloudboot-server/" if !util.FileExist(dir) { err := os.MkdirAll(dir, 0777) if err != nil { w.Write([]byte("{\"Message\":\"" + err.Error() + "\",\"Status\":\"error\"}")) return } } list := strings.Split(handle.Filename, ".") fix := list[len(list)-1] h := md5.New() h.Write([]byte(fmt.Sprintf("%s", time.Now().UnixNano()) + handle.Filename)) cipherStr := h.Sum(nil) md5 := fmt.Sprintf("%s", hex.EncodeToString(cipherStr)) filename := "osinstall-upload-" + md5 + "." + fix result := make(map[string]interface{}) result["result"] = filename if util.FileExist(dir + filename) { os.Remove(dir + filename) } f, err := os.OpenFile(dir+filename, os.O_WRONLY|os.O_CREATE, 0666) io.Copy(f, file) if err != nil { w.Write([]byte("{\"Message\":\"" + err.Error() + "\",\"Status\":\"error\"}")) return } defer f.Close() defer file.Close() data := map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": result} json, err := json.Marshal(data) if err != nil { w.Write([]byte("{\"Message\":\"" + err.Error() + "\",\"Status\":\"error\"}")) return } w.Write([]byte(json)) return }
func UploadDevice(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { r.ParseForm() file, handle, err := r.FormFile("file") if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } cd, err := iconv.Open("UTF-8", "GBK") if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } defer cd.Close() dir := "./upload/" if !util.FileExist(dir) { err := os.MkdirAll(dir, 0777) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } } list := strings.Split(handle.Filename, ".") fix := list[len(list)-1] h := md5.New() h.Write([]byte(fmt.Sprintf("%s", time.Now().UnixNano()) + handle.Filename)) cipherStr := h.Sum(nil) md5 := fmt.Sprintf("%s", hex.EncodeToString(cipherStr)) filename := md5 + "." + fix result := make(map[string]interface{}) result["result"] = filename if util.FileExist(dir + filename) { os.Remove(dir + filename) } f, err := os.OpenFile(dir+filename, os.O_WRONLY|os.O_CREATE, 0666) io.Copy(f, file) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } defer f.Close() defer file.Close() w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": result}) return }
func UploadHardware(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { r.ParseForm() file, handle, err := r.FormFile("file") if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } cd, err := iconv.Open("UTF-8", "GBK") if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } defer cd.Close() dir := "./upload/" if !util.FileExist(dir) { err := os.MkdirAll(dir, 0777) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } } list := strings.Split(handle.Filename, ".") fix := list[len(list)-1] h := md5.New() h.Write([]byte(fmt.Sprintf("%s", time.Now().UnixNano()) + handle.Filename)) cipherStr := h.Sum(nil) md5 := fmt.Sprintf("%s", hex.EncodeToString(cipherStr)) filename := md5 + "." + fix result := make(map[string]interface{}) result["result"] = filename if util.FileExist(dir + filename) { os.Remove(dir + filename) } f, err := os.OpenFile(dir+filename, os.O_WRONLY|os.O_CREATE, 0666) io.Copy(f, file) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } defer f.Close() defer file.Close() fileHandle, err := os.Open(dir + filename) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } var data []map[string]interface{} bytes, err := ioutil.ReadAll(fileHandle) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } errDecode := json.Unmarshal(bytes, &data) if errDecode != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "文件格式错误:" + errDecode.Error()}) return } for _, v := range data { if v["Company"] == "" || v["ModelName"] == "" { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "文件格式错误!"}) return } } repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } for _, v := range data { var info struct { Company string Product string ModelName string Raid string Oob string Bios string IsSystemAdd string Tpl string Data string Source string Version string Status string } info.Company = strings.TrimSpace(v["Company"].(string)) info.Product = strings.TrimSpace(v["Product"].(string)) info.ModelName = strings.TrimSpace(v["ModelName"].(string)) info.IsSystemAdd = "Yes" info.Tpl = strings.TrimSpace(v["Tpl"].(string)) info.Data = strings.TrimSpace(v["Data"].(string)) info.Source = strings.TrimSpace(info.Source) info.Version = strings.TrimSpace(info.Version) info.Status = "Success" where := "company = '" + info.Company + "' and product = '" + info.Product + "' and model_name = '" + info.ModelName + "' and is_system_add = 'Yes'" count, err := repo.CountHardwareByWhere(where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } if count > 0 { hardware, err := repo.GetHardwareByWhere(where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } var isUpdate bool isUpdate = false if hardware.Data != info.Data { isUpdate = true } if hardware.Tpl != info.Tpl { isUpdate = true } if isUpdate == true { _, err := repo.UpdateHardwareById(hardware.ID, info.Company, info.Product, info.ModelName, info.Raid, info.Oob, info.Bios, info.Tpl, info.Data, info.Source, info.Version, info.Status) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } } } else { _, errAdd := repo.AddHardware(info.Company, info.Product, info.ModelName, info.Raid, info.Oob, info.Bios, info.IsSystemAdd, info.Tpl, info.Data, info.Source, info.Version, info.Status) if errAdd != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errAdd.Error()}) return } } } //delete tmp file errDeleteFile := os.Remove(dir + filename) if errDeleteFile != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errDeleteFile.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": result}) return }