最近更新时间:2024.04.03 14:10:08
首次发布时间:2021.02.23 10:42:40
本文为您提供了服务端 Go SDK 的媒资上传模块相关的 API 调用示例。主要包含:媒资上传、素材上传、URL 批量拉取上传、查询 URL 上传任务状态等。
媒资上传模块的获取上传地址和凭证和确认上传的 OpenAPI,目前支持 2 个版本。
说明
上传文件时,要求携带文件后缀。例如,mp4 文件上传,携带 .mp4 或 .MP4。
使用前先完成初始化,参考初始化。
由 App/Web Server 持有的 AK/SK 在本地签出,不依赖外网。如需要同时生成多个 UploadAuthToken
,您可以循环调用生成方法。
func TestVod_GetUploadAuthWithExpiredTime(t *testing.T) { instance := vod.NewInstance() instance.SetAccessKey("") instance.SetSecretKey("") opts := make([]model.UploadAuthOpt, 0) // 使用 vod.WithUploadKeyPtn("表达式") 来限制上传的文件路径 FileName // 如: "test/*" 表示上传的文件必须包含 "test/" 前缀 // opts = append(opts, vod.WithUploadKeyPtn("表达式")) // 使用 vod.WithUploadSpaceNames([]string{}) 来限制允许上传的空间 // opts = append(opts, vod.WithUploadSpaceNames([]string{})) // 使用 vod.WithUploadPolicy() 来设置上传策略 // opts = append(opts, vod.WithUploadPolicy(&model.UploadPolicy{})) // 默认过期时间为 1 小时 ret, _ := instance.GetUploadAuth(opts...) b, _ := json.Marshal(ret) fmt.Println(string(b)) ret2, _ := instance.GetUploadAuthWithExpiredTime(3*time.Hour, opts...) b2, _ := json.Marshal(ret2) fmt.Println(string(b2)) } type UploadPolicy struct { ContentTypeBlackList []string `json:"ContentTypeBlackList,omitempty"` // 上传文件 Content-Type 黑名单 ContentTypeWhiteList []string `json:"ContentTypeWhiteList,omitempty"` // 上传文件 Content-Type 白名单 FileSizeUpLimit string `json:"FileSizeUpLimit,omitempty"` // 上传文件大小上限 FileSizeBottomLimit string `json:"FileSizeBottomLimit,omitempty"` // 上传文件大小下限 }
接口请求参数和返回参数详见 OpenAPI:获取上传地址和凭证 及 确认上传。
package upload import ( "encoding/json" "fmt" "testing" "github.com/volcengine/volc-sdk-golang/base" "github.com/volcengine/volc-sdk-golang/service/vod" "github.com/volcengine/volc-sdk-golang/service/vod/models/business" "github.com/volcengine/volc-sdk-golang/service/vod/models/request" "github.com/volcengine/volc-sdk-golang/service/vod/upload/functions" ) func TestVod_UploadMediaWithCallback(t *testing.T) { // call below method if you dont set ak and sk in ~/.vcloud/config instance := vod.NewInstance() instance.SetCredential(base.Credentials{ AccessKeyID: "your ak", SecretAccessKey: "your sk", }) // or set ak and ak as follow //vod.NewInstance().SetAccessKey("") //vod.NewInstance().SetSecretKey("") spaceName := "your space" filePath := "media file path" getMetaFunc := functions.GetMetaFunc() // 抽取视频元信息&封面功能,如需要则添加 snapShotFunc := functions.SnapshotFunc(business.VodUploadFunctionInput{SnapshotTime: 1.3}) // 抽取特定时刻的封面截图 startWorkFlowFunc := functions.StartWorkflowFunc(business.VodUploadFunctionInput{TemplateId: "templateId"}) // 如希望上传完成后自动执行转码工作流,可将工作流Id填写在此函数里 optionFunc := functions.AddOptionInfoFunc(business.VodUploadFunctionInput{ Title: "title", // 视频的标题 Tags: "Go,编程", // 视频的标签 Description: "Go 语言高级编程", // 视频的描述信息 Format: "MP4", // 音视频格式 ClassificationId: 0, // 分类 Id,上传时可以指定分类,非必须字段 }) vodFunctions := []business.VodUploadFunction{snapShotFunc, getMetaFunc, startWorkFlowFunc, optionFunc} fbts, _ := json.Marshal(vodFunctions) vodUploadMediaRequset := &request.VodUploadMediaRequest{ SpaceName: spaceName, // 空间名称 FilePath: filePath, // 本地文件路径 CallbackArgs: "my callback", // 透传信息,业务希望透传的字段可以写入,返回和回调中会返回此字段,非必须字段 Functions: string(fbts), // 函数功能,具体可以参考火山引擎点播文档 开发者API-媒资上传-确认上传的 Functions 部分,可选功能字段 FileName: "", // 设置文件路径 } resp, _, err := instance.UploadMediaWithCallback(vodUploadMediaRequset) if err != nil { fmt.Printf("error %v", err) } else { bts, _ := json.Marshal(resp) fmt.Printf("resp = %s", bts) } fmt.Println() fmt.Println(resp.GetResponseMetadata().GetRequestId()) fmt.Println(resp.GetResult().GetData().GetVid()) }
接口请求参数和返回参数详见 OpenAPI:获取上传地址和凭证 及 确认上传。
package upload import ( "encoding/json" "fmt" "testing" "github.com/volcengine/volc-sdk-golang/base" "github.com/volcengine/volc-sdk-golang/service/vod" "github.com/volcengine/volc-sdk-golang/service/vod/models/business" "github.com/volcengine/volc-sdk-golang/service/vod/models/request" "github.com/volcengine/volc-sdk-golang/service/vod/upload/consts" "github.com/volcengine/volc-sdk-golang/service/vod/upload/functions" ) func TestVod_UploadMediaMaterialWithCallback(t *testing.T) { // call below method if you dont set ak and sk in ~/.vcloud/config instance := vod.NewInstance() instance.SetCredential(base.Credentials{ AccessKeyID: "your ak", SecretAccessKey: "your sk", }) // or set ak and ak as follow //vod.NewInstance().SetAccessKey("") //vod.NewInstance().SetSecretKey("") spaceName := "your space" filePath := "material file path" snapShotFunc := functions.SnapshotFunc(business.VodUploadFunctionInput{SnapshotTime: 1.3}) getMetaFunc := functions.GetMetaFunc() addOptionFunc := functions.AddOptionInfoFunc(business.VodUploadFunctionInput{ Title: "素材测试视频", // 标题 Tags: "test", // 多个标签可用逗号隔开 Description: "素材测试,视频文件", // 素材描述信息 Category: consts.CategoryVideo, // 素材分类,在 video、audio、image、dynamic_img、subtitle、font 中枚举 RecordType: 2, // 素材上传 Type 值为 2 Format: "mp4", //格式。若传入 Format 的话,以您传入参数为准,否则以系统识别出的 Format 为准。若遇到特殊文件无法识别,Format 可能为空。 }) vodFunctions := []business.VodUploadFunction{addOptionFunc, getMetaFunc, snapShotFunc} fbts, _ := json.Marshal(vodFunctions) vodUploadMaterialRequest := &request.VodUploadMaterialRequest{ SpaceName: spaceName, FilePath: filePath, CallbackArgs: "my callback", Functions: string(fbts), FileType: consts.FileTypeMedia, FileName: "", } resp, _, err := instance.UploadMaterialWithCallback(vodUploadMaterialRequest) if err != nil { fmt.Printf("error %v", err) } else { bts, _ := json.Marshal(resp) fmt.Printf(" resp = %s", bts) } fmt.Println(resp.GetResponseMetadata().GetRequestId()) fmt.Println(resp.GetResult().GetData().GetMid()) fmt.Printf("%d ", int(resp.GetResult().GetData().GetSourceInfo().GetSize())) } func TestVod_UploadImageMaterialWithCallback(t *testing.T) { // call below method if you dont set ak and sk in ~/.vcloud/config instance := vod.NewInstance() instance.SetCredential(base.Credentials{ AccessKeyID: "your ak", SecretAccessKey: "your sk", }) // or set ak and ak as follow //vod.NewInstance().SetAccessKey("") //vod.NewInstance().SetSecretKey("") spaceName := "your space" filePath := "material file path" getMetaFunc := functions.GetMetaFunc() addOptionFunc := functions.AddOptionInfoFunc(business.VodUploadFunctionInput{ Title: "素材测试图片", Tags: "test", Description: "素材测试,图片文件", Category: consts.CategoryImage, RecordType: 2, Format: "jpg", }) vodFunctions := []business.VodUploadFunction{addOptionFunc, getMetaFunc} fbts, _ := json.Marshal(vodFunctions) vodUploadMaterialRequest := &request.VodUploadMaterialRequest{ SpaceName: spaceName, FilePath: filePath, CallbackArgs: "my callback", Functions: string(fbts), FileType: consts.FileTypeImage, FileName: "", } resp, _, err := instance.UploadMaterialWithCallback(vodUploadMaterialRequest) if err != nil { fmt.Printf("error %v", err) } else { bts, _ := json.Marshal(resp) fmt.Printf(" resp = %s", bts) } fmt.Println(resp.String()) fmt.Println(resp.GetResponseMetadata().GetRequestId()) fmt.Println(resp.GetResult().GetData().GetMid()) } func TestVod_UploadObjectMaterialWithCallback(t *testing.T) { // call below method if you dont set ak and sk in ~/.vcloud/config instance := vod.NewInstance() instance.SetCredential(base.Credentials{ AccessKeyID: "your ak", SecretAccessKey: "your sk", }) // or set ak and ak as follow //vod.NewInstance().SetAccessKey("") //vod.NewInstance().SetSecretKey("") spaceName := "your space" filePath := "material file path" getMetaFunc := functions.GetMetaFunc() addOptionFunc := functions.AddOptionInfoFunc(business.VodUploadFunctionInput{ Title: "素材测试字幕", Tags: "test", Description: "素材测试,字幕文件", Category: consts.CategorySubtitle, RecordType: 2, Format: "vtt", }) vodFunctions := []business.VodUploadFunction{addOptionFunc, getMetaFunc} fbts, _ := json.Marshal(vodFunctions) vodUploadMaterialRequest := &request.VodUploadMaterialRequest{ SpaceName: spaceName, FilePath: filePath, CallbackArgs: "my callback", Functions: string(fbts), FileType: consts.FileTypeObject, FileName: "", } resp, _, err := instance.UploadMaterialWithCallback(vodUploadMaterialRequest) if err != nil { fmt.Printf("error %v", err) } else { bts, _ := json.Marshal(resp) fmt.Printf(" resp = %s", bts) } fmt.Println(resp.String()) fmt.Println(resp.GetResponseMetadata().GetRequestId()) fmt.Println(resp.GetResult().GetData().GetMid()) }
接口请求参数和返回参数详见 OpenAPI:URL 批量拉取上传。
package upload import ( "fmt" "github.com/volcengine/volc-sdk-golang/service/vod/models/business" "github.com/volcengine/volc-sdk-golang/base" "github.com/volcengine/volc-sdk-golang/service/vod" "github.com/volcengine/volc-sdk-golang/service/vod/models/request" "testing" ) func TestVod_UploadMediaByUrl(t *testing.T) { // call below method if you dont set ak and sk in ~/.vcloud/config instance := vod.NewInstance() instance.SetCredential(base.Credentials{ AccessKeyID: "your ak", SecretAccessKey: "your sk", }) urlSets := make([]*business.VodUrlUploadURLSet, 0) urlSet := &business.VodUrlUploadURLSet{ SourceUrl: "your source url", // 源视频 URL CallbackArgs: "your callback args", // 透传信息,业务希望透传的字段可以写入,返回和回调中会返回此字段,非必须字段 FileName: "", // 设置文件路径 FileExtension: ".mp4", // 设置文件后缀,以 . 开头,不超过 8 位,非必须字段 CustomURLHeaders: map[string]string{}, // 自定义 Header,业务希望访问源视频URL携带的Header(例如User-Agent)可以通过该参数传入,非必须字段 } urlSets = append(urlSets, urlSet) query := &request.VodUrlUploadRequest{ SpaceName: "your SpaceName", URLSets: urlSets, } resp, status, err := instance.UploadMediaByUrl(query) fmt.Println(status) fmt.Println(err) fmt.Println(resp.String()) }
接口请求参数和返回参数详见 OpenAPI:查询 URL 批量上传任务状态。
package vod import ( "fmt" "testing" "github.com/volcengine/volc-sdk-golang/base" "github.com/volcengine/volc-sdk-golang/service/vod" "github.com/volcengine/volc-sdk-golang/service/vod/models/request" ) func Test_QueryUploadTaskInfo(t *testing.T) { instance := vod.NewInstance() instance.SetCredential(base.Credentials{ AccessKeyID: "your ak", SecretAccessKey: "your sk", }) query := &request.VodQueryUploadTaskInfoRequest{ JobIds: "your JobIds", } resp, status, err := instance.QueryUploadTaskInfo(query) fmt.Println(status) fmt.Println(err) fmt.Println(resp.String()) }