MCPcopy Create free account
hub / github.com/53AI/53AIHub / UploadFile

Method UploadFile

api/controller/batch_upload.go:119–199  ·  view source on GitHub ↗

UploadFile 上传单个文件 @Summary 上传单个文件 @Description 上传批量上传中的单个文件,支持同名文件处理模式:sequence(默认)自动添加序号,replace删除原文件 @Tags 批量上传 @Accept multipart/form-data @Produce json @Security BearerAuth @Param batch_id path string true "批次ID" @Param file formData file true "上传文件" @Param upload_token formData string true "上传令

(c *gin.Context)

Source from the content-addressed store, hash-verified

117// @Failure 500 {object} model.CommonResponse "服务器内部错误"
118// @Router /api/files/upload/batch/{batch_id}/file [post]
119func (ctrl *BatchUploadController) UploadFile(c *gin.Context) {
120 batchID := c.Param("batch_id")
121
122 // 验证批次和权限
123 batch, err := ctrl.manager.GetBatch(batchID)
124 if err != nil {
125 c.JSON(http.StatusNotFound, model.NotFound.ToResponse(err))
126 return
127 }
128
129 // 获取上传参数
130 uploadToken := c.PostForm("upload_token")
131 fileID := c.PostForm("file_upload_id")
132 duplicateMode := service.DuplicateMode(c.PostForm("duplicate_mode"))
133 if duplicateMode == "" {
134 duplicateMode = service.DuplicateModeSequence
135 }
136
137 // 添加验证file_id是否存在于批次中
138 fileUpload, exists := batch.GetFileUpload(fileID)
139 if !exists {
140 c.JSON(http.StatusBadRequest, model.ParamError.ToResponse(errors.New("无效的文件ID")))
141 return
142 }
143 relativePath := fileUpload.RelativePath
144
145 // 验证上传令牌
146 if !ctrl.manager.ValidateUploadToken(batchID, uploadToken) {
147 c.JSON(http.StatusUnauthorized, model.AuthFailed.ToResponse(errors.New("无效的上传令牌")))
148 return
149 }
150
151 if config.DOCUMENT_SINGLE_FILE_MAX_SIZE > 0 {
152 if err := c.Request.ParseMultipartForm(64 << 20); err != nil {
153 c.JSON(http.StatusBadRequest, model.ParamError.ToResponse(fmt.Errorf("文件上传信息过大: %v", err)))
154 return
155 }
156 }
157
158 // 获取上传文件
159 fileHeader, err := c.FormFile("file")
160 if err != nil {
161 c.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))
162 return
163 }
164
165 if config.DOCUMENT_SINGLE_FILE_MAX_SIZE > 0 && fileHeader.Size > config.DOCUMENT_SINGLE_FILE_MAX_SIZE {
166 c.JSON(http.StatusBadRequest, model.FileError.ToResponse(
167 fmt.Errorf("文件大小超过限制,最大允许: %dMB", config.DOCUMENT_SINGLE_FILE_MAX_SIZE/(1024*1024))))
168 return
169 }
170
171 // 提交上传任务
172 task := &service.UploadTask{
173 BatchID: batchID,
174 FileID: fileID,
175 RelativePath: relativePath,
176 FileHeader: fileHeader,

Callers

nothing calls this directly

Calls 7

GetBatchMethod · 0.80
ToResponseMethod · 0.80
GetFileUploadMethod · 0.80
ValidateUploadTokenMethod · 0.80
ErrorfMethod · 0.80
SubmitUploadTaskMethod · 0.80
NewMethod · 0.45

Tested by

no test coverage detected