package file import ( "fmt" "net/http" "os" ) // const ( // //经过测试,linux下,延时需要大于100ms // TIME_DELAY_AFTER_WRITE = 200 // ) // type Response struct { // Data []string `json:"data"` // } // type MMLRequest struct { // MML []string `json:"mml"` // } // func GetFile(w http.ResponseWriter, r *http.Request) { // log.Debug("PostMMLToNF processing... ") // vars := mux.Vars(r) // neType := vars["elementTypeValue"] // params := r.URL.Query() // neId := params["ne_id"] // log.Debug("neType:", neType, "neId", neId) // neInfo := new(dborm.NeInfo) // var err error // if len(neId) == 0 { // log.Error("ne_id NOT FOUND") // services.ResponseBadRequest400WrongParamValue(w) // return // } // neInfo, err = dborm.XormGetNeInfo(neType, neId[0]) // if err != nil { // log.Error("dborm.XormGetNeInfo is failed:", err) // services.ResponseInternalServerError500DatabaseOperationFailed(w) // return // } // var buf [8192]byte // var n int // var mmlResult []string // if neInfo != nil { // hostMML := fmt.Sprintf("%s:%d", neInfo.Ip, config.GetYamlConfig().MML.Port) // conn, err := net.Dial("tcp", hostMML) // if err != nil { // errMsg := fmt.Sprintf("Failed to dial %s: %v", hostMML, err) // log.Error(errMsg) // mmlResult = append(mmlResult, errMsg) // response := Response{mmlResult} // services.ResponseWithJson(w, http.StatusOK, response) // return // } // loginStr := fmt.Sprintf("%s\n%s\n", config.GetYamlConfig().MML.User, config.GetYamlConfig().MML.Password) // n, err = conn.Write([]byte(loginStr)) // if err != nil { // log.Errorf("Error: %s", err.Error()) // return // } // time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) // n, err = conn.Read(buf[0:]) // if err != nil { // log.Errorf("Error: %s", err.Error()) // return // } // log.Debug(string(buf[0:n])) // body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) // if err != nil { // log.Error("io.ReadAll is failed:", err) // services.ResponseNotFound404UriNotExist(w, r) // return // } // log.Debug("Body:", string(body)) // mmlRequest := new(MMLRequest) // _ = json.Unmarshal(body, mmlRequest) // for _, mml := range mmlRequest.MML { // mmlCommand := fmt.Sprintf("%s\n", mml) // log.Debug("mml command:", mmlCommand) // n, err = conn.Write([]byte(mmlCommand)) // if err != nil { // log.Errorf("Error: %s", err.Error()) // return // } // time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) // n, err = conn.Read(buf[0:]) // if err != nil { // log.Errorf("Error: %s", err.Error()) // return // } // log.Debug(string(buf[0 : n-len(neType)-2])) // mmlResult = append(mmlResult, string(buf[0:n-len(neType)-2])) // } // } // response := Response{mmlResult} // services.ResponseWithJson(w, http.StatusOK, response) // } // 格式文件大小单位 func FormatFileSize(fileSize float64) (size string) { if fileSize < 1024 { return fmt.Sprintf("%.2fB", fileSize/float64(1)) } else if fileSize < (1024 * 1024) { return fmt.Sprintf("%.2fKB", fileSize/float64(1024)) } else if fileSize < (1024 * 1024 * 1024) { return fmt.Sprintf("%.2fMB", fileSize/float64(1024*1024)) } else if fileSize < (1024 * 1024 * 1024 * 1024) { return fmt.Sprintf("%.2fGB", fileSize/float64(1024*1024*1024)) } else if fileSize < (1024 * 1024 * 1024 * 1024 * 1024) { return fmt.Sprintf("%.2fTB", fileSize/float64(1024*1024*1024*1024)) } else { return fmt.Sprintf("%.2fEB", fileSize/float64(1024*1024*1024*1024*1024)) } } func IsSymlink(mode os.FileMode) bool { return mode&os.ModeSymlink != 0 } const dotCharacter = 46 func IsHidden(path string) bool { return path[0] == dotCharacter } func GetMimeType(path string) string { file, err := os.Open(path) if err != nil { return "" } defer file.Close() buffer := make([]byte, 512) _, err = file.Read(buffer) if err != nil { return "" } mimeType := http.DetectContentType(buffer) return mimeType } func GetSymlink(path string) string { linkPath, err := os.Readlink(path) if err != nil { return "" } return linkPath }