129 lines
3.6 KiB
Go
129 lines
3.6 KiB
Go
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)
|
|
}
|