subtitle_task.go
1 package handler 2 3 import ( 4 "krillin-ai/internal/dto" 5 "krillin-ai/internal/response" 6 "krillin-ai/internal/service" 7 "krillin-ai/internal/deps" 8 "krillin-ai/log" 9 "os" 10 "path/filepath" 11 12 "github.com/gin-gonic/gin" 13 "go.uber.org/zap" 14 ) 15 16 func (h Handler) StartSubtitleTask(c *gin.Context) { 17 var req dto.StartVideoSubtitleTaskReq 18 if err := c.ShouldBindJSON(&req); err != nil { 19 log.GetLogger().Error("StartSubtitleTask ShouldBindJSON err", zap.Error(err)) 20 response.R(c, response.Response{ 21 Error: -1, 22 Msg: "参数错误", 23 Data: nil, 24 }) 25 return 26 } 27 28 // 检查配置是否需要重新初始化 29 if configUpdated { 30 log.GetLogger().Info("检测到配置更新,重新初始化服务") 31 deps.CheckDependency() 32 h.Service = service.NewService() 33 configUpdated = false 34 } 35 36 svc := h.Service 37 38 data, err := svc.StartSubtitleTask(req) 39 if err != nil { 40 response.R(c, response.Response{ 41 Error: -1, 42 Msg: err.Error(), 43 Data: nil, 44 }) 45 return 46 } 47 response.R(c, response.Response{ 48 Error: 0, 49 Msg: "成功", 50 Data: data, 51 }) 52 } 53 54 func (h Handler) GetSubtitleTask(c *gin.Context) { 55 var req dto.GetVideoSubtitleTaskReq 56 if err := c.ShouldBindQuery(&req); err != nil { 57 response.R(c, response.Response{ 58 Error: -1, 59 Msg: "参数错误", 60 Data: nil, 61 }) 62 return 63 } 64 65 // 检查配置是否需要重新初始化 66 if configUpdated { 67 log.GetLogger().Info("检测到配置更新,重新初始化服务") 68 h.Service = service.NewService() 69 configUpdated = false 70 } 71 72 svc := h.Service 73 data, err := svc.GetTaskStatus(req) 74 if err != nil { 75 response.R(c, response.Response{ 76 Error: -1, 77 Msg: err.Error(), 78 Data: nil, 79 }) 80 return 81 } 82 response.R(c, response.Response{ 83 Error: 0, 84 Msg: "成功", 85 Data: data, 86 }) 87 } 88 89 func (h Handler) UploadFile(c *gin.Context) { 90 form, err := c.MultipartForm() 91 if err != nil { 92 response.R(c, response.Response{ 93 Error: -1, 94 Msg: "未能获取文件", 95 Data: nil, 96 }) 97 return 98 } 99 100 files := form.File["file"] 101 if len(files) == 0 { 102 response.R(c, response.Response{ 103 Error: -1, 104 Msg: "未上传任何文件", 105 Data: nil, 106 }) 107 return 108 } 109 110 // 保存每个文件 111 var savedFiles []string 112 for _, file := range files { 113 savePath := "./uploads/" + file.Filename 114 if err := c.SaveUploadedFile(file, savePath); err != nil { 115 response.R(c, response.Response{ 116 Error: -1, 117 Msg: "文件保存失败: " + file.Filename, 118 Data: nil, 119 }) 120 return 121 } 122 savedFiles = append(savedFiles, "local:"+savePath) 123 } 124 125 response.R(c, response.Response{ 126 Error: 0, 127 Msg: "文件上传成功", 128 Data: gin.H{"file_path": savedFiles}, 129 }) 130 } 131 132 func (h Handler) DownloadFile(c *gin.Context) { 133 requestedFile := c.Param("filepath") 134 if requestedFile == "" { 135 response.R(c, response.Response{ 136 Error: -1, 137 Msg: "文件路径为空", 138 Data: nil, 139 }) 140 return 141 } 142 143 localFilePath := filepath.Join(".", requestedFile) 144 if _, err := os.Stat(localFilePath); os.IsNotExist(err) { 145 response.R(c, response.Response{ 146 Error: -1, 147 Msg: "文件不存在", 148 Data: nil, 149 }) 150 return 151 } 152 c.FileAttachment(localFilePath, filepath.Base(localFilePath)) 153 }