/ internal / handler / subtitle_task.go
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  }