package uploadapi import ( "net/http" "videoweb/app/service/uploadser" "videoweb/pub/common" "videoweb/pub/common/log" "videoweb/pub/common/srvdef" "github.com/gin-gonic/gin" ) // VideoBody 分片上传视频 // @Tags 上传 // @Summary 视频分片上传 // @Description 将视频分片转发至存储服务 /media/web/autopublish/videoBody // @Accept multipart/form-data // @Produce json // @Param taskId formData string true "视频任务ID" // @Param pos formData string true "当前分片序号,从0开始" // @Param uploadUserName formData string false "上传用户名,为空默认 questionnaires" // @Param file formData file true "分片文件数据" // @Success 200 {object} uploadser.VideoBodyResp "成功" // @Failure 400 {string} string "参数错误" // @Router /api/app/upload/videoBody [post] func VideoBody(ctx *gin.Context) { form, err := ctx.MultipartForm() if err != nil { common.ServerJSON(ctx, srvdef.ErrParamError, nil) return } taskIds := form.Value["taskId"] posList := form.Value["pos"] uploadUserNames := form.Value["uploadUserName"] fileList := form.File["file"] if len(taskIds) == 0 || taskIds[0] == "" { common.ServerJSON(ctx, srvdef.ErrParamError, "taskId 不能为空") return } if len(posList) == 0 || posList[0] == "" { common.ServerJSON(ctx, srvdef.ErrParamError, "pos 不能为空") return } if len(fileList) == 0 { common.ServerJSON(ctx, srvdef.ErrParamError, "file 不能为空") return } param := &uploadser.VideoBodyParam{ TaskId: taskIds[0], Pos: posList[0], FileHeader: fileList[0], } if len(uploadUserNames) > 0 { param.UploadUserName = uploadUserNames[0] } respBytes, err := uploadser.ForwardVideoBody(param) if err != nil { log.Error("VideoBody forward failed", log.E(err)) common.ServerJSON(ctx, srvdef.ServerError, nil) return } ctx.Data(http.StatusOK, "application/json; charset=utf-8", respBytes) } // VideoOk 通知视频分片上传完成 // @Tags 上传 // @Summary 视频分片上传完成通知 // @Description 所有分片上传完毕后调用,转发至存储服务 /media/web/autopublish/videoOk // @Accept json // @Produce json // @Param param body object true "{ \"taskId\": \"...\" }" // @Success 200 {object} uploadser.VideoOkResp "成功" // @Failure 400 {string} string "参数错误" // @Router /api/app/upload/videoOk [post] func VideoOk(ctx *gin.Context) { var req struct { TaskId string `json:"taskId" binding:"required"` } if err := ctx.ShouldBindJSON(&req); err != nil { common.ServerJSON(ctx, srvdef.ErrParamError, nil) return } respBytes, err := uploadser.ForwardVideoOk(req.TaskId) if err != nil { log.Error("VideoOk forward failed", log.E(err)) common.ServerJSON(ctx, srvdef.ServerError, nil) return } ctx.Data(http.StatusOK, "application/json; charset=utf-8", respBytes) } // UploadImage 上传图片 // @Tags 上传 // @Summary 图片上传 // @Description 将图片转发至存储服务 /media/web/autopublish/image // @Accept multipart/form-data // @Produce json // @Param file formData file true "图片文件" // @Success 200 {object} uploadser.ImageUploadResp "成功" // @Failure 400 {string} string "参数错误" // @Router /api/app/upload/image [post] func UploadImage(ctx *gin.Context) { f, err := ctx.FormFile("file") if err != nil { common.ServerJSON(ctx, srvdef.ErrParamError, "file 不能为空") return } param := &uploadser.ImageParam{ FileHeader: f, } respBytes, err := uploadser.ForwardImage(param) if err != nil { log.Error("UploadImage forward failed", log.E(err)) common.ServerJSON(ctx, srvdef.ServerError, nil) return } ctx.Data(http.StatusOK, "application/json; charset=utf-8", respBytes) }