Initial commit: web_hghl_server
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,275 @@
|
||||
package storage
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/base64"
|
||||
"errors"
|
||||
"fmt"
|
||||
"mime/multipart"
|
||||
"videoweb/pub/storage/proxy"
|
||||
|
||||
"strconv"
|
||||
)
|
||||
|
||||
var (
|
||||
// buffer = bytes.Buffer{}
|
||||
// mtx sync.Mutex
|
||||
)
|
||||
|
||||
// web后台上传使用, form-data方式上传
|
||||
func UploadImage(ctx context.Context, f *multipart.FileHeader, domain string) (path string, err error) {
|
||||
if f == nil {
|
||||
return "", errors.New("file is nil!")
|
||||
}
|
||||
var file multipart.File
|
||||
if file, err = f.Open(); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
defer file.Close()
|
||||
|
||||
//mtx.Lock()
|
||||
//defer mtx.Unlock()
|
||||
buffer := bytes.Buffer{}
|
||||
if _, err = buffer.ReadFrom(file); err != nil {
|
||||
return
|
||||
}
|
||||
return proxy.UploadImg(f.Filename, buffer.Bytes(), domain)
|
||||
}
|
||||
|
||||
func UploadVideoBody(ctx context.Context, form *multipart.Form, domain string) (*proxy.Result, error) {
|
||||
if form == nil {
|
||||
return nil, errors.New("multipart from is nil")
|
||||
}
|
||||
sb, err := makeShardBodyByForm(form)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return proxy.UploadVideo(domain, sb)
|
||||
}
|
||||
|
||||
func UploadVideoBodyV2(ctx context.Context, form *multipart.Form,
|
||||
domain string, appIdIn int, publish string) (*proxy.Result, error) {
|
||||
if form == nil {
|
||||
return nil, errors.New("multipart from is nil")
|
||||
}
|
||||
sb, err := makeShardBodyByFormV2(form, appIdIn, publish)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return proxy.UploadVideoV2(domain, sb)
|
||||
}
|
||||
|
||||
func VideoBody(ctx context.Context, taskId, typ, domain string, pos int, data []byte) (*proxy.Result, error) {
|
||||
body := &proxy.ShardBody{
|
||||
TaskId: taskId,
|
||||
Pos: pos,
|
||||
FileData: base64.StdEncoding.EncodeToString(data),
|
||||
Type: typ,
|
||||
}
|
||||
if typ == "1" {
|
||||
body.Type = "AV"
|
||||
} else if typ == "2" {
|
||||
body.Type = "SP"
|
||||
}
|
||||
return proxy.UploadVideo(domain, body)
|
||||
}
|
||||
|
||||
func UploadVideoOK(ctx context.Context, in *proxy.ShardOk, domain string) (*proxy.VideoOkResult, error) {
|
||||
return proxy.PostOk(in, domain)
|
||||
}
|
||||
func UploadVideoOKV2(ctx context.Context, in *proxy.ShardOk, domain string) (*proxy.VideoOkResult, error) {
|
||||
return proxy.PostOkV2(in, domain)
|
||||
}
|
||||
|
||||
func QueryMedia(ctx context.Context, in *proxy.MediaQueryeReq, domain string) (*proxy.VideoQueryResult, error) {
|
||||
return proxy.QueryMedia(in, domain)
|
||||
}
|
||||
func QueryMedias(ctx context.Context, in *proxy.MediaQueryesReq, domain string) (*proxy.VideoQuerysResult, error) {
|
||||
return proxy.QueryMedias(in, domain)
|
||||
}
|
||||
func QueryAdvitiseLocationList(ctx context.Context, in *proxy.AppAdvitiseInfoReq, domain string) (*proxy.AdvitiseLocationQuerysResult, error) {
|
||||
return proxy.QueryAdvitiseLocation(in, domain)
|
||||
}
|
||||
|
||||
func SyncMedia(in *proxy.MediaTaskSyncReq, domain string) (result *proxy.VideoQuerysResult, err error) {
|
||||
return proxy.SyncMedia(in, domain)
|
||||
}
|
||||
func makeShardBodyByForm(form *multipart.Form) (*proxy.ShardBody, error) {
|
||||
poss := form.Value["pos"]
|
||||
taskIds := form.Value["taskId"]
|
||||
types := form.Value["type"]
|
||||
fs := form.File["file"]
|
||||
totalPoss := form.Value["totalChunks"]
|
||||
|
||||
var (
|
||||
pos, total int
|
||||
taskId string
|
||||
typ string
|
||||
f *multipart.FileHeader
|
||||
err error
|
||||
)
|
||||
|
||||
if len(fs) == 0 || fs[0] == nil {
|
||||
return nil, errors.New("no file")
|
||||
}
|
||||
f = fs[0]
|
||||
|
||||
if len(poss) == 0 || poss[0] == "" {
|
||||
return nil, errors.New("no pos")
|
||||
}
|
||||
if pos, err = strconv.Atoi(poss[0]); err != nil {
|
||||
return nil, fmt.Errorf("invalid pos")
|
||||
}
|
||||
if len(totalPoss) == 0 || totalPoss[0] == "" {
|
||||
return nil, errors.New("no totalPos")
|
||||
}
|
||||
if total, err = strconv.Atoi(totalPoss[0]); err != nil {
|
||||
return nil, fmt.Errorf("invalid totalPos")
|
||||
}
|
||||
|
||||
if len(taskIds) == 0 || taskIds[0] == "" {
|
||||
return nil, errors.New("no taskId")
|
||||
}
|
||||
taskId = taskIds[0]
|
||||
|
||||
if len(types) == 0 || types[0] == "" {
|
||||
return nil, errors.New("no type")
|
||||
}
|
||||
if types[0] == "1" {
|
||||
typ = "AV"
|
||||
} else if types[0] == "2" {
|
||||
typ = "SP"
|
||||
} else if types[0] == "3" {
|
||||
typ = "AI"
|
||||
} else {
|
||||
typ = types[0]
|
||||
}
|
||||
|
||||
file, ne := f.Open()
|
||||
if ne != nil {
|
||||
return nil, ne
|
||||
}
|
||||
defer file.Close()
|
||||
//mtx.Lock()
|
||||
//defer mtx.Unlock()
|
||||
buffer := bytes.Buffer{}
|
||||
if _, err = buffer.ReadFrom(file); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp := &proxy.ShardBody{
|
||||
TaskId: taskId,
|
||||
Pos: pos,
|
||||
FileData: base64.StdEncoding.EncodeToString(buffer.Bytes()),
|
||||
Type: typ,
|
||||
TotalPos: total,
|
||||
}
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
func makeShardBodyByFormV2(form *multipart.Form, appIdIn int, publishIn string) (
|
||||
*proxy.ShardBodyV2, error) {
|
||||
taskIds := form.Value["taskId"]
|
||||
types := form.Value["type"]
|
||||
poss := form.Value["pos"]
|
||||
fs := form.File["file"]
|
||||
totalPoss := form.Value["totalChunks"]
|
||||
fileNames := form.Value["filename"]
|
||||
appIds := form.Value["appId"]
|
||||
publishs := form.Value["publish"]
|
||||
|
||||
var (
|
||||
pos, total int
|
||||
taskId string
|
||||
f *multipart.FileHeader
|
||||
fileName string
|
||||
typ string
|
||||
publish string
|
||||
appId int
|
||||
err error
|
||||
)
|
||||
|
||||
if len(fs) == 0 || fs[0] == nil {
|
||||
return nil, errors.New("no file")
|
||||
}
|
||||
f = fs[0]
|
||||
|
||||
if len(poss) == 0 || poss[0] == "" {
|
||||
return nil, errors.New("no pos")
|
||||
}
|
||||
if pos, err = strconv.Atoi(poss[0]); err != nil {
|
||||
return nil, fmt.Errorf("invalid pos")
|
||||
}
|
||||
if len(totalPoss) == 0 || totalPoss[0] == "" {
|
||||
return nil, errors.New("no totalPos")
|
||||
}
|
||||
if total, err = strconv.Atoi(totalPoss[0]); err != nil {
|
||||
return nil, fmt.Errorf("invalid totalPos")
|
||||
}
|
||||
|
||||
if len(taskIds) == 0 || taskIds[0] == "" {
|
||||
return nil, errors.New("no taskId")
|
||||
}
|
||||
taskId = taskIds[0]
|
||||
|
||||
if len(types) == 0 || types[0] == "" {
|
||||
return nil, errors.New("no type")
|
||||
}
|
||||
if types[0] == "1" {
|
||||
typ = "AV"
|
||||
} else if types[0] == "2" {
|
||||
typ = "SP"
|
||||
} else if types[0] == "3" {
|
||||
typ = "AI"
|
||||
} else {
|
||||
typ = types[0]
|
||||
}
|
||||
|
||||
if len(fileNames) == 0 || fileNames[0] == "" {
|
||||
return nil, errors.New("no fileName")
|
||||
}
|
||||
fileName = fileNames[0]
|
||||
|
||||
if len(publishs) == 0 || publishs[0] == "" {
|
||||
return nil, errors.New("no publish")
|
||||
}
|
||||
publish = publishs[0]
|
||||
if publish == "" {
|
||||
publish = publishIn
|
||||
}
|
||||
|
||||
if len(appIds) == 0 || appIds[0] == "" {
|
||||
return nil, errors.New("no appId")
|
||||
}
|
||||
if appId, err = strconv.Atoi(appIds[0]); err != nil {
|
||||
return nil, fmt.Errorf("invalid appId")
|
||||
}
|
||||
|
||||
if appId == 0 {
|
||||
appId = appIdIn
|
||||
}
|
||||
|
||||
file, ne := f.Open()
|
||||
if ne != nil {
|
||||
return nil, ne
|
||||
}
|
||||
defer file.Close()
|
||||
buffer := bytes.Buffer{}
|
||||
if _, err = buffer.ReadFrom(file); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp := &proxy.ShardBodyV2{
|
||||
TaskId: taskId,
|
||||
Pos: pos,
|
||||
FileData: base64.StdEncoding.EncodeToString(buffer.Bytes()),
|
||||
Type: typ,
|
||||
TotalPos: total,
|
||||
FileName: fileName,
|
||||
AppId: appId,
|
||||
Publish: publish,
|
||||
}
|
||||
return resp, nil
|
||||
}
|
||||
Reference in New Issue
Block a user