Files
hadja_server/pub/storage/proxy/object.go
T
rootandClaude Opus 4.7 79ac89b458 Initial commit
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-11-07 10:47:18 +08:00

510 lines
12 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package proxy
import (
"bytes"
"encoding/base64"
"encoding/json"
"errors"
"fmt"
"strings"
"videoweb/pub/common/http"
"videoweb/pub/common/log"
)
const (
apiDomain = "http://resourcets.bbaazz.me/file/upload"
)
var (
header = map[string]string{"Content-Type": "application/json"}
)
const (
Success = 200
)
func UploadImg(fileName string, data []byte, domain string) (pathStr string, err error) {
r := objreq{
Name: fileName,
Data: base64.StdEncoding.EncodeToString(data),
}
jsonbytes, err := json.Marshal(r)
if err != nil {
return
}
url := ImageUploadAddressRepair(domain, BucketImageAddressV2)
resp, err := http.Post(url, header, bytes.NewReader(jsonbytes))
if err != nil {
return
}
var or objresp
if err = json.Unmarshal(resp.Data, &or); err != nil {
return
}
if or.Code != Success {
err = fmt.Errorf("上传失败:%s", or.Msg)
return
}
pathStr = or.Object.Name
return
}
func UploadBase64Img(fileName string, data string, domain string) (pathStr string, err error) {
r := objreq{
Name: fileName,
Data: data,
}
jsonbytes, err := json.Marshal(r)
if err != nil {
return
}
if len(domain) == 0 {
domain = apiDomain
}
url := domain
if !strings.Contains(domain, "/file/upload") {
url = domain + "/file/upload"
}
resp, err := http.Post(url, header, bytes.NewReader(jsonbytes))
if err != nil {
return
}
var or objresp
if err = json.Unmarshal(resp.Data, &or); err != nil {
return
}
if or.Code != Success {
err = fmt.Errorf("上传失败:%s", or.Msg)
return
}
pathStr = or.Object.Name
if strings.Contains(domain, "resourceimg.bbaazz.me") &&
!strings.HasPrefix(pathStr, "v2/") {
pathStr = "v2/" + pathStr
}
return
}
func fileServer() (url string) {
return "http://resourcets.bbaazz.me"
}
func PostOk(baseInfo *ShardOk, domain string) (result *VideoOkResult, err error) {
result = &VideoOkResult{}
paramJson, err := json.Marshal(baseInfo)
if err != nil {
return
}
url := VideoOkAddressRepair(domain, BucketVideoAddressV2)
fmt.Println(baseInfo)
fr, err := http.Post(url, header, bytes.NewReader(paramJson))
if err != nil {
return
}
fmt.Println(string(fr.Data))
if err = json.Unmarshal(fr.Data, result); err != nil {
fmt.Println(result)
return nil, err
}
fmt.Println(result)
return
}
func PostOkV2(baseInfo *ShardOk, domain string) (result *VideoOkResult, err error) {
result = &VideoOkResult{}
paramJson, err := json.Marshal(baseInfo)
if err != nil {
return
}
url := VideoOkAddressRepair(domain, BucketVideoAddressV2)
fmt.Println(paramJson)
fr, err := http.Post(url, header, bytes.NewReader(paramJson))
if err != nil {
return
}
if err = json.Unmarshal(fr.Data, result); err != nil {
fmt.Println(result)
return nil, err
}
fmt.Println(result)
return
}
func QueryMedia(baseInfo *MediaQueryeReq, domain string) (result *VideoQueryResult, err error) {
result = &VideoQueryResult{}
paramJson, err := json.Marshal(baseInfo)
if err != nil {
return
}
if len(domain) == 0 {
domain = DomainAddressRepair(domain, BucketVideoAddressV2)
}
url := domain
if !strings.Contains(domain, "/file/web/media/query") {
url = domain + "/file/web/media/query"
}
fr, err := http.Post(url, header, bytes.NewReader(paramJson))
if err != nil {
return
}
if err = json.Unmarshal(fr.Data, result); err != nil {
fmt.Println(err)
return nil, err
}
return
}
func QueryMedias(baseInfo *MediaQueryesReq, domain string) (result *VideoQuerysResult, err error) {
result = &VideoQuerysResult{
Data: make([]MediaResp, 0),
}
paramJson, err := json.Marshal(baseInfo)
if err != nil {
return
}
if len(domain) == 0 {
domain = DomainAddressRepair(domain, BucketVideoAddressV2)
}
url := domain
if !strings.Contains(domain, "/media/web/task/querys") {
url = domain + "/media/web/task/querys"
}
fr, err := http.Post(url, header, bytes.NewReader(paramJson))
if err != nil {
return
}
if err = json.Unmarshal(fr.Data, result); err != nil {
fmt.Println(err)
return nil, err
}
return
}
func UploadVideo(domain string, body *ShardBody) (result *Result, err error) {
if body == nil {
return nil, errors.New("no video to upload")
}
url := VideoBodyAddressRepair(domain, BucketVideoAddressV2)
fmt.Println(url)
buf, err := json.Marshal(body)
if err != nil {
return nil, err
}
resp, err := http.Post(url, header, bytes.NewBuffer(buf))
if err != nil {
return nil, err
}
fmt.Println("resp-->", string(resp.Data))
result = new(Result)
if err = json.Unmarshal(resp.Data, result); err != nil {
return nil, err
}
return
}
func UploadVideoV2(domain string, body *ShardBodyV2) (result *Result, err error) {
if body == nil {
return nil, errors.New("no video to upload")
}
url := VideoBodyAddressRepair(domain, BucketVideoAddressV2)
fmt.Println(url)
buf, err := json.Marshal(body)
if err != nil {
return nil, err
}
resp, err := http.Post(url, header, bytes.NewBuffer(buf))
if err != nil {
return nil, err
}
fmt.Println("resp-->", string(resp.Data))
result = new(Result)
if err = json.Unmarshal(resp.Data, result); err != nil {
return nil, err
}
return
}
func PostSearch(param *MediaSearchReq, domain string) (result *MediaSearchResult, err error) {
result = &MediaSearchResult{}
paramJson, err := json.Marshal(param)
if err != nil {
return
}
if len(domain) == 0 {
domain = DomainAddressRepair(domain, BucketVideoAddressV2)
}
url := domain
if !strings.Contains(domain, "/file/web/media/search") {
url = domain + "/file/web/media/search"
}
fr, err := http.Post(url, header, bytes.NewReader(paramJson))
if err != nil {
return
}
if err = json.Unmarshal(fr.Data, result); err != nil {
return nil, err
}
//log.Info("proxy:test", log.Any("url", url), log.Any("result", result))
return
}
func PostUpdate(param *MediaUpdateReq, domain string) (result *MediaUpdateResult, err error) {
result = &MediaUpdateResult{}
paramJson, err := json.Marshal(param)
if err != nil {
return
}
if len(domain) == 0 {
domain = DomainAddressRepair(domain, BucketVideoAddressV2)
}
url := domain
if !strings.Contains(domain, "/file/web/media/update") {
url = domain + "/file/web/media/update"
}
fr, perr := http.Post(url, header, bytes.NewReader(paramJson))
if perr != nil {
log.Error("PostUpdate Unmarshal", log.E(perr))
err = perr
return
}
if err = json.Unmarshal(fr.Data, result); err != nil {
log.Error("PostUpdate Unmarshal", log.E(err), log.Any("data", string(fr.Data)))
return nil, err
}
return
}
func PostDelete(param *MediaDelReq, domain string) (result *MediaDelResult, err error) {
result = &MediaDelResult{}
paramJson, err := json.Marshal(param)
if err != nil {
return
}
if len(domain) == 0 {
domain = DomainAddressRepair(domain, BucketVideoAddressV2)
}
url := domain
if !strings.Contains(domain, "/file/web/media/delete") {
url = domain + "/file/web/media/delete"
}
fr, err := http.Post(url, header, bytes.NewReader(paramJson))
if err != nil {
return
}
if err = json.Unmarshal(fr.Data, result); err != nil {
return nil, err
}
return
}
func PostUpdatePreTime(param *MediaUpdatePreTime, domain string) (result *MediaDelResult, err error) {
result = &MediaDelResult{}
paramJson, err := json.Marshal(param)
if err != nil {
return
}
if len(domain) == 0 {
domain = DomainAddressRepair(domain, BucketVideoAddressV2)
}
url := domain
if !strings.Contains(domain, "/file/web/media/update/prefile") {
url = domain + "/file/web/media/update/prefile"
}
fr, err := http.Post(url, header, bytes.NewReader(paramJson))
if err != nil {
return
}
if err = json.Unmarshal(fr.Data, result); err != nil {
return nil, err
}
return
}
func UploadVideoV2New(domain string, body *ShardBodyV2) (result *Result, err error) {
if body == nil {
return nil, errors.New("no video to upload")
}
if len(domain) == 0 {
domain = fileServer()
}
url := domain
if !strings.Contains(domain, "/file/web/proxy/videoBodyV2") {
url = domain + "/file/web/proxy/videoBodyV2"
}
fmt.Println(url)
buf, err := json.Marshal(body)
if err != nil {
return nil, err
}
resp, err := http.Post(url, header, bytes.NewBuffer(buf))
if err != nil {
return nil, err
}
fmt.Println("resp-->", string(resp.Data))
result = new(Result)
if err = json.Unmarshal(resp.Data, result); err != nil {
return nil, err
}
// if strings.Contains(domain, "resourcets.bbaazz.me") && !strings.HasPrefix(result.Data.VideoUri, "v2/") {
// result.Data.VideoUri = "v2/" + result.Data.VideoUri
// }
fmt.Println("result-->", result)
if result.Code != 200 {
err = fmt.Errorf("result code err")
}
return
}
func SyncMedia(baseInfo *MediaTaskSyncReq, domain string) (result *VideoQuerysResult, err error) {
result = &VideoQuerysResult{}
paramJson, err := json.Marshal(baseInfo)
if err != nil {
return
}
if len(domain) == 0 {
domain = DomainAddressRepair(domain, BucketVideoAddressV2)
}
url := domain
if !strings.Contains(domain, "/media/web/task/sync") {
url = domain + "/media/web/task/sync"
}
fr, err := http.Post(url, header, bytes.NewReader(paramJson))
if err != nil {
return
}
if err = json.Unmarshal(fr.Data, result); err != nil {
fmt.Println(err)
return nil, err
}
return
}
// SyncMediaFile 将相对路径 m3u8 登记到 media 切片服(status=MediaFileSyncing)
func SyncMediaFile(req *MediaFileSyncReq, domain string) (result *MediaAPIResult, err error) {
result = &MediaAPIResult{}
paramJson, err := json.Marshal(req)
if err != nil {
return
}
if len(domain) == 0 {
domain = DomainAddressRepair(domain, BucketVideoAddressV2)
}
url := domain
if !strings.Contains(domain, "/media/web/mediafile/sync") {
url = domain + "/media/web/mediafile/sync"
}
fr, err := http.Post(url, header, bytes.NewReader(paramJson))
if err != nil {
return
}
if err = json.Unmarshal(fr.Data, result); err != nil {
return nil, err
}
return
}
// AddMediaTask 提交 media 加水印切片任务
func AddMediaTask(req *MediaTaskAddReq, domain string) (result *MediaAPIResult, err error) {
result = &MediaAPIResult{}
paramJson, err := json.Marshal(req)
if err != nil {
return
}
if len(domain) == 0 {
domain = DomainAddressRepair(domain, BucketVideoAddressV2)
}
url := domain
if !strings.Contains(domain, "/media/web/task/add") {
url = domain + "/media/web/task/add"
}
reqHeader := map[string]string{
"Content-Type": "application/json",
"acc-id": "1",
"acc-name": "playlet-watermark",
"app-id": fmt.Sprintf("%d", req.AppId),
}
fr, err := http.Post(url, reqHeader, bytes.NewReader(paramJson))
if err != nil {
return
}
if err = json.Unmarshal(fr.Data, result); err != nil {
return nil, err
}
return
}
// UpdateMediaWatermark 按已有 media 任务重新加水印切片
func UpdateMediaWatermark(req *MediaTaskUpdateWatermarkReq, domain string) (result *MediaAPIResult, err error) {
result = &MediaAPIResult{}
paramJson, err := json.Marshal(req)
if err != nil {
return
}
if len(domain) == 0 {
domain = DomainAddressRepair(domain, BucketVideoAddressV2)
}
url := domain
if !strings.Contains(domain, "/media/web/task/update/watermark") {
url = domain + "/media/web/task/update/watermark"
}
reqHeader := map[string]string{
"Content-Type": "application/json",
"acc-id": "1",
"acc-name": "playlet-watermark",
"app-id": fmt.Sprintf("%d", req.AppId),
}
fr, err := http.Post(url, reqHeader, bytes.NewReader(paramJson))
if err != nil {
return
}
if err = json.Unmarshal(fr.Data, result); err != nil {
return nil, err
}
return
}
// QueryMediaSource 按原片 ID 查询 media source 状态
func QueryMediaSource(sourceID string, appId int64, domain string) (*MediaSourceListItem, error) {
req := MediaSourceListReq{
Id: sourceID,
AppId: appId,
WebAppId: appId,
PageNum: 1,
PageSize: 1,
}
paramJSON, err := json.Marshal(req)
if err != nil {
return nil, err
}
if len(domain) == 0 {
domain = DomainAddressRepair(domain, BucketVideoAddressV2)
}
url := domain
if !strings.Contains(domain, "/media/web/source/list") {
url = domain + "/media/web/source/list"
}
reqHeader := map[string]string{
"Content-Type": "application/json",
"acc-id": "1",
"acc-name": "playlet-watermark",
"app-id": fmt.Sprintf("%d", appId),
}
fr, err := http.Post(url, reqHeader, bytes.NewReader(paramJSON))
if err != nil {
return nil, err
}
result := &MediaSourceListResult{}
if err = json.Unmarshal(fr.Data, result); err != nil {
return nil, err
}
if result.Code != Success || len(result.Data.List) == 0 {
return nil, nil
}
return &result.Data.List[0], nil
}