package controller import ( cm "app.yhyue.com/moapp/jybase/common" . "bindresume/config" "bindresume/service" "fmt" "github.com/gin-gonic/gin" "log" "math/rand" "mime/multipart" "net/http" "path/filepath" "strings" "time" ) func UploadFile(r *gin.Context) { // 设置内存限制(100 MB) if err := r.Request.ParseMultipartForm(100 << 20); err != nil { r.JSON(http.StatusBadRequest, gin.H{ "error": "文件大小超过限制(最大100MB)", }) return } // 获取所有文件(兼容多字段) form, err := r.MultipartForm() if err != nil { r.JSON(http.StatusBadRequest, gin.H{ "error": "无法解析表单", }) return } // 收集所有上传的文件 var allFiles []*multipart.FileHeader for fieldName := range form.File { allFiles = append(allFiles, form.File[fieldName]...) } // 处理上传结果 successFiles := make([]string, 0) failedFiles := make(map[string]string) for _, fileHeader := range allFiles { // 生成唯一文件名(时间戳+随机数) uniqueName := fmt.Sprintf("%s_%d%s", time.Now().Format("20060102150405001")+cm.GetComplexRandom(8, 0, 0), rand.Intn(1000), filepath.Ext(fileHeader.Filename), ) // 检查文件类型(示例:仅允许图片) allowedTypes := map[string]bool{ ".jpg": true, ".jpeg": true, ".png": true, ".gif": true, } ext := filepath.Ext(uniqueName) if !allowedTypes[ext] { failedFiles[fileHeader.Filename] = "文件类型不允许" continue } // 保存文件 //dst := filepath.Join(config.SysConfig.FilePath, uniqueName) filePath := service.GetFilePath(uniqueName, "bifile") log.Println("获取路径", filePath) if err := r.SaveUploadedFile(fileHeader, filePath); err != nil { failedFiles[fileHeader.Filename] = fmt.Sprintf("保存失败: %v", err) continue } successFiles = append(successFiles, fmt.Sprintf("/shareFile/%s", strings.Replace(filePath, cm.ObjToString(SysConfig.FilePath), "", 1))) } // 返回响应 r.JSON(http.StatusOK, gin.H{ "success_count": len(successFiles), "success_files": successFiles, "failed_count": len(failedFiles), "failed_files": failedFiles, }) } func WorkTaskSave(r *gin.Context) { //创建人在kb时候有账号 name := r.Query("name") kbUserId, err := service.CheckCreateUserAccount(name) if err != nil { r.JSON(http.StatusOK, err) } //插入工单 task := &service.WordTask{ Title: r.Query("title"), Description: r.Query("description"), Color_id: "green", Project_id: 784, Column_id: 3283, Position: 1, Score: 0, Creator_id: kbUserId, } err = task.WordTaskSave() if err != nil { r.JSON(http.StatusOK, err) } //创建成功发送企微消息 err = service.SendWechatWorkMessage() if err != nil { r.JSON(http.StatusOK, err) } r.JSON(http.StatusOK, gin.H{ "success": 1, }) }