You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
2.7 KiB
118 lines
2.7 KiB
package http |
|
|
|
import ( |
|
"io/ioutil" |
|
"net/http" |
|
|
|
grpc "go-common/app/service/bbq/video-image/api/grpc/v1" |
|
"go-common/app/service/bbq/video-image/api/http/v1" |
|
"go-common/app/service/bbq/video-image/conf" |
|
"go-common/app/service/bbq/video-image/service" |
|
"go-common/library/ecode" |
|
"go-common/library/log" |
|
bm "go-common/library/net/http/blademaster" |
|
|
|
"github.com/pkg/errors" |
|
) |
|
|
|
var ( |
|
srv *service.Service |
|
) |
|
|
|
// Init init |
|
func Init(c *conf.Config, s *service.Service) { |
|
srv = s |
|
engine := bm.DefaultServer(c.BM.Server) |
|
route(engine) |
|
if err := engine.Start(); err != nil { |
|
log.Error("bm Start error(%v)", err) |
|
panic(err) |
|
} |
|
} |
|
|
|
func route(e *bm.Engine) { |
|
e.Ping(ping) |
|
e.Register(register) |
|
g := e.Group("/bbq/internal/image") |
|
{ |
|
g.POST("/upload", imageUpload) |
|
g.POST("/video_cover/score", videoCoverScore) |
|
g.POST("/upload/v2", upload) |
|
} |
|
} |
|
|
|
func ping(c *bm.Context) { |
|
if err := srv.Ping(c); err != nil { |
|
log.Error("ping error(%v)", err) |
|
c.AbortWithStatus(http.StatusServiceUnavailable) |
|
} |
|
} |
|
|
|
func register(c *bm.Context) { |
|
c.JSON(map[string]interface{}{}, nil) |
|
} |
|
|
|
func videoCoverScore(c *bm.Context) { |
|
args := &v1.ScoreRequest{} |
|
if err := c.Bind(args); err != nil { |
|
errors.Wrap(err, "参数验证失败") |
|
return |
|
} |
|
c.Request.ParseMultipartForm(1 << 22) |
|
f, h, err := c.Request.FormFile("file") |
|
//参数判断 |
|
if err != nil { |
|
log.Errorv(c, log.KV("log", "get file error"), log.KV("err", err)) |
|
err = ecode.FileNotExists |
|
return |
|
} |
|
defer f.Close() |
|
//文件大小 |
|
if h.Size > (1 << 22) { |
|
log.Errorv(c, log.KV("log", "get file error"), log.KV("err", "file size too large")) |
|
err = ecode.FileTooLarge |
|
return |
|
} |
|
|
|
c.JSON(srv.VideoCoverScore(c, args.Name, f)) |
|
} |
|
|
|
//internal upload |
|
func upload(c *bm.Context) { |
|
req := &grpc.ImgUploadRequest{} |
|
req.Filename = c.Request.PostFormValue("filename") |
|
req.Dir = c.Request.PostFormValue("dir") |
|
req.File = []byte(c.Request.PostFormValue("file")) |
|
c.JSON(srv.ImgUpload(c, req)) |
|
} |
|
func imageUpload(c *bm.Context) { |
|
req := &grpc.ImgUploadRequest{} |
|
req.Filename = c.Request.PostFormValue("filename") |
|
req.Dir = c.Request.PostFormValue("dir") |
|
|
|
c.Request.ParseMultipartForm(1 << 22) |
|
f, h, err := c.Request.FormFile("file") |
|
//参数判断 |
|
if err != nil { |
|
log.Errorv(c, log.KV("log", "get file error"), log.KV("err", err)) |
|
err = ecode.FileNotExists |
|
return |
|
} |
|
defer f.Close() |
|
//文件大小 |
|
if h.Size > (1 << 22) { |
|
log.Errorv(c, log.KV("log", "get file error"), log.KV("err", "file size too large")) |
|
err = ecode.FileTooLarge |
|
return |
|
} |
|
req.File, err = ioutil.ReadAll(f) |
|
// req.File = []byte(c.Request.PostFormValue("file")) |
|
//参数判断 |
|
if err != nil { |
|
log.Errorv(c, log.KV("log", "get file error"), log.KV("err", err)) |
|
err = ecode.FileNotExists |
|
return |
|
} |
|
|
|
c.JSON(srv.ImgUpload(c, req)) |
|
}
|
|
|