正在显示
10 个修改的文件
包含
245 行增加
和
2 行删除
@@ -9,6 +9,9 @@ AccessKeyID ="LTAI4FhiZ3UktC6N1u3H5GFC" | @@ -9,6 +9,9 @@ AccessKeyID ="LTAI4FhiZ3UktC6N1u3H5GFC" | ||
9 | AccessKeySecret ="UyspWwdni55CYQ02hUCint4qY2jNYO" | 9 | AccessKeySecret ="UyspWwdni55CYQ02hUCint4qY2jNYO" |
10 | cname ="https://media.goexample.live/" | 10 | cname ="https://media.goexample.live/" |
11 | 11 | ||
12 | +OssEndPoint ="oss-cn-shanghai.aliyuncs.com" | ||
13 | +BuckName ="mmm-vod-dev-public" | ||
14 | + | ||
12 | 15 | ||
13 | #友盟推送 | 16 | #友盟推送 |
14 | UMENG_API_HOST = "http://msg.umeng.com" | 17 | UMENG_API_HOST = "http://msg.umeng.com" |
@@ -5,6 +5,7 @@ go 1.12 | @@ -5,6 +5,7 @@ go 1.12 | ||
5 | require ( | 5 | require ( |
6 | github.com/ajg/form v1.5.1 // indirect | 6 | github.com/ajg/form v1.5.1 // indirect |
7 | github.com/aliyun/alibaba-cloud-sdk-go v1.60.348 | 7 | github.com/aliyun/alibaba-cloud-sdk-go v1.60.348 |
8 | + github.com/aliyun/aliyun-oss-go-sdk v2.1.4+incompatible | ||
8 | github.com/aliyun/aliyun-sts-go-sdk v0.0.0-20171106034748-98d3903a2309 | 9 | github.com/aliyun/aliyun-sts-go-sdk v0.0.0-20171106034748-98d3903a2309 |
9 | github.com/astaxie/beego v1.10.0 | 10 | github.com/astaxie/beego v1.10.0 |
10 | github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072 // indirect | 11 | github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072 // indirect |
pkg/application/oss/service/oss.go
0 → 100644
1 | +package oss | ||
2 | + | ||
3 | +import ( | ||
4 | + "bytes" | ||
5 | + "fmt" | ||
6 | + "github.com/aliyun/aliyun-oss-go-sdk/oss" | ||
7 | + "io/ioutil" | ||
8 | + "mime/multipart" | ||
9 | + "openapi/pkg/constant" | ||
10 | + protocol "openapi/pkg/domain" | ||
11 | + "openapi/pkg/infrastructure/aliyun" | ||
12 | + "openapi/pkg/infrastructure/log" | ||
13 | + "openapi/pkg/infrastructure/utils" | ||
14 | + "path/filepath" | ||
15 | +) | ||
16 | + | ||
17 | +type BuckObject struct { | ||
18 | + DefaultHost string `json:"host"` | ||
19 | + Key string `json:"key"` | ||
20 | + Path string `json:"path"` | ||
21 | + FileName string `json:"fileName"` | ||
22 | +} | ||
23 | + | ||
24 | +//创建视频上传凭证 | ||
25 | +func CreateOssUpload(header *protocol.RequestHeader, MultipartForm *multipart.Form) (rsp interface{}, err error) { | ||
26 | + var objects []aliyun.Object | ||
27 | + var listPath []BuckObject | ||
28 | + var bucket *oss.Bucket | ||
29 | + bucket, err = aliyun.DefaultBucket() | ||
30 | + if err != nil { | ||
31 | + log.Error(err.Error()) | ||
32 | + return | ||
33 | + } | ||
34 | + for k, _ := range MultipartForm.File { | ||
35 | + v := MultipartForm.File[k] | ||
36 | + for i := range v { | ||
37 | + if v[i].Size > 1024*1024*50 { | ||
38 | + continue | ||
39 | + } | ||
40 | + f, _ := v[i].Open() | ||
41 | + data, _ := ioutil.ReadAll(f) | ||
42 | + f.Close() | ||
43 | + reader := bytes.NewBuffer(data) | ||
44 | + fileBase := filepath.Base(v[i].Filename) | ||
45 | + key := utils.GetFileName(header.AppProject, aliyun.FileObject, fileBase) | ||
46 | + objects = append(objects, aliyun.Object{ | ||
47 | + Key: key, | ||
48 | + Value: reader, | ||
49 | + }) | ||
50 | + listPath = append(listPath, BuckObject{ | ||
51 | + DefaultHost: fmt.Sprintf("https://%v.%v", constant.BuckName, constant.OssEndPoint), | ||
52 | + Path: fmt.Sprintf("https://%v.%v/%v", constant.BuckName, constant.OssEndPoint, key), | ||
53 | + Key: key, | ||
54 | + FileName: fileBase, | ||
55 | + }) | ||
56 | + } | ||
57 | + } | ||
58 | + if len(objects) == 0 { | ||
59 | + return | ||
60 | + } | ||
61 | + err = aliyun.CreateObjects(bucket, objects...) | ||
62 | + if err != nil { | ||
63 | + log.Error(err.Error()) | ||
64 | + return | ||
65 | + } | ||
66 | + rsp = listPath | ||
67 | + return | ||
68 | +} | ||
69 | + | ||
70 | +//创建视频上传凭证 | ||
71 | +func CreateStsAuth(header *protocol.RequestHeader, files []string) (rsp interface{}, err error) { | ||
72 | + access, e := aliyun.DefaultSts() | ||
73 | + if e != nil { | ||
74 | + err = e | ||
75 | + log.Error(e.Error()) | ||
76 | + } | ||
77 | + var listPath []BuckObject | ||
78 | + for _, v := range files { | ||
79 | + fileBase := filepath.Base(v) | ||
80 | + key := utils.GetFileName(header.AppProject, aliyun.FileObject, fileBase) | ||
81 | + listPath = append(listPath, BuckObject{ | ||
82 | + DefaultHost: fmt.Sprintf("https://%v.%v", constant.BuckName, constant.OssEndPoint), | ||
83 | + Path: fmt.Sprintf("https://%v.%v/%v", constant.BuckName, constant.OssEndPoint, key), | ||
84 | + Key: key, | ||
85 | + FileName: fileBase, | ||
86 | + }) | ||
87 | + } | ||
88 | + return map[string]interface{}{"access": access, "files": listPath}, nil | ||
89 | +} |
pkg/constant/oss.go
0 → 100644
1 | +package constant | ||
2 | + | ||
3 | +var ( | ||
4 | + OssEndPoint = "oss-cn-shanghai.aliyuncs.com" | ||
5 | + BuckName = "mmm-vod-dev-public" | ||
6 | + //OssAccessKeyID string = "LTAI4GGkZMdDoxRpehefbQhV" | ||
7 | + //OssAccessKeySecret string = "tytXo0RwxhGa3luyfmBB6PKe8M6Uu4" | ||
8 | +) | ||
9 | + | ||
10 | +func init() { | ||
11 | + OssEndPoint = config.StringDefault("OssEndPoint", OssEndPoint) | ||
12 | + BuckName = config.StringDefault("BuckName", BuckName) | ||
13 | + //OssAccessKeyID = config.StringDefault("AccessKeyID", OssAccessKeyID) | ||
14 | + //OssAccessKeySecret = config.StringDefault("OssAccessKeyID", OssAccessKeySecret) | ||
15 | +} |
1 | package aliyun | 1 | package aliyun |
2 | 2 | ||
3 | +import ( | ||
4 | + "github.com/aliyun/aliyun-oss-go-sdk/oss" | ||
5 | + "io" | ||
6 | + "openapi/pkg/constant" | ||
7 | +) | ||
8 | + | ||
3 | /* | 9 | /* |
4 | AK AccessKey 完全访问权限 | 10 | AK AccessKey 完全访问权限 |
5 | STS (Security Token Service) 临时访问控制 | 11 | STS (Security Token Service) 临时访问控制 |
@@ -12,3 +18,46 @@ type ossConfig struct { | @@ -12,3 +18,46 @@ type ossConfig struct { | ||
12 | BuckName string | 18 | BuckName string |
13 | CallbackUrl string | 19 | CallbackUrl string |
14 | } | 20 | } |
21 | + | ||
22 | +func DefaultBucket() (*oss.Bucket, error) { | ||
23 | + client, err := oss.New(constant.OssEndPoint, constant.AccessKeyID, constant.AccessKeySecret) | ||
24 | + if err != nil { | ||
25 | + return nil, err | ||
26 | + } | ||
27 | + | ||
28 | + // Get bucket | ||
29 | + bucket, err := client.Bucket(constant.BuckName) | ||
30 | + if err != nil { | ||
31 | + return nil, err | ||
32 | + } | ||
33 | + | ||
34 | + return bucket, nil | ||
35 | +} | ||
36 | + | ||
37 | +type Object struct { | ||
38 | + Key string | ||
39 | + Value io.Reader | ||
40 | +} | ||
41 | + | ||
42 | +// CreateObjects creates some objects | ||
43 | +func CreateObjects(bucket *oss.Bucket, objects ...Object) error { | ||
44 | + for _, object := range objects { | ||
45 | + err := bucket.PutObject(object.Key, object.Value) | ||
46 | + if err != nil { | ||
47 | + return err | ||
48 | + } | ||
49 | + } | ||
50 | + return nil | ||
51 | +} | ||
52 | + | ||
53 | +// DeleteObjects deletes some objects. | ||
54 | +// object = key | ||
55 | +func DeleteObjects(bucket *oss.Bucket, objects ...string) error { | ||
56 | + for _, object := range objects { | ||
57 | + err := bucket.DeleteObject(object) | ||
58 | + if err != nil { | ||
59 | + return err | ||
60 | + } | ||
61 | + } | ||
62 | + return nil | ||
63 | +} |
pkg/infrastructure/aliyun/sts.go
0 → 100644
1 | +package aliyun | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "github.com/aliyun/alibaba-cloud-sdk-go/services/sts" | ||
6 | + "openapi/pkg/constant" | ||
7 | + "openapi/pkg/infrastructure/log" | ||
8 | +) | ||
9 | + | ||
10 | +func DefaultSts() (interface{}, error) { | ||
11 | + //构建一个阿里云客户端, 用于发起请求。 | ||
12 | + //构建阿里云客户端时,需要设置AccessKey ID和AccessKey Secret。 | ||
13 | + client, err := sts.NewClientWithAccessKey(constant.RegionID, constant.AccessKeyID, constant.AccessKeySecret) | ||
14 | + if err != nil { | ||
15 | + return nil, err | ||
16 | + } | ||
17 | + | ||
18 | + //构建请求对象。 | ||
19 | + request := sts.CreateAssumeRoleRequest() | ||
20 | + request.Scheme = "https" | ||
21 | + | ||
22 | + //设置参数。 指定角色的ARN。格式:acs:ram::$accountID:role/$roleName/$RoleSessionName 。 mmm-go@1373671070046453.onaliyun.com | ||
23 | + // 配置用户 - ram角色权限-oss授权 | ||
24 | + // $accountID 用户的阿里云账号 | ||
25 | + // $RoleArn 点到ram角色 具体的权限详情 格式 格式:acs:ram::$accountID:role/$roleName/$RoleSessionName | ||
26 | + request.RoleArn = fmt.Sprintf("acs:ram::1373671070046453:role/role-oss-sts") | ||
27 | + // 会话名称 | ||
28 | + request.RoleSessionName = "role-oss-sts-session" | ||
29 | + | ||
30 | + //发起请求,并得到响应。 | ||
31 | + response, e := client.AssumeRole(request) | ||
32 | + if e != nil { | ||
33 | + err = e | ||
34 | + log.Error(e.Error()) | ||
35 | + } | ||
36 | + return map[string]interface{}{ | ||
37 | + "accessKeySecret": response.Credentials.AccessKeySecret, | ||
38 | + "expiration": response.Credentials.Expiration, | ||
39 | + "accessKeyId": response.Credentials.AccessKeyId, | ||
40 | + "securityToken": response.Credentials.SecurityToken, | ||
41 | + }, nil | ||
42 | +} |
@@ -165,7 +165,7 @@ func NewAps(options *push.Options) (v *Aps) { | @@ -165,7 +165,7 @@ func NewAps(options *push.Options) (v *Aps) { | ||
165 | v = &Aps{ | 165 | v = &Aps{ |
166 | Alert: NewAlert(options), | 166 | Alert: NewAlert(options), |
167 | AutoBadge: "+1", | 167 | AutoBadge: "+1", |
168 | - ContentAvailable: 1, | 168 | + ContentAvailable: 0, |
169 | } | 169 | } |
170 | return | 170 | return |
171 | } | 171 | } |
@@ -3,6 +3,7 @@ package v1 | @@ -3,6 +3,7 @@ package v1 | ||
3 | import ( | 3 | import ( |
4 | "encoding/json" | 4 | "encoding/json" |
5 | "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log" | 5 | "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log" |
6 | + oss "openapi/pkg/application/oss/service" | ||
6 | vod "openapi/pkg/application/vod/service" | 7 | vod "openapi/pkg/application/vod/service" |
7 | "openapi/pkg/domain" | 8 | "openapi/pkg/domain" |
8 | "openapi/pkg/infrastructure/aliyun" | 9 | "openapi/pkg/infrastructure/aliyun" |
@@ -197,3 +198,32 @@ func (this *VodController) GetVideoPlayAuth() { | @@ -197,3 +198,32 @@ func (this *VodController) GetVideoPlayAuth() { | ||
197 | header := controllers.GetRequestHeader(this.Ctx) | 198 | header := controllers.GetRequestHeader(this.Ctx) |
198 | msg = domain.NewReturnResponse(vod.GetVideoPlayAuth(header, request)) | 199 | msg = domain.NewReturnResponse(vod.GetVideoPlayAuth(header, request)) |
199 | } | 200 | } |
201 | + | ||
202 | +//归档对象 PutObject | ||
203 | +// @router /putObject [post] | ||
204 | +func (this *VodController) PutObject() { | ||
205 | + var msg *domain.ResponseMessage | ||
206 | + defer func() { | ||
207 | + this.Resp(msg) | ||
208 | + }() | ||
209 | + | ||
210 | + header := controllers.GetRequestHeader(this.Ctx) | ||
211 | + msg = domain.NewReturnResponse(oss.CreateOssUpload(header, this.Ctx.Request.MultipartForm)) | ||
212 | +} | ||
213 | + | ||
214 | +// STS授权 CreateStsAuth | ||
215 | +// @router /createStsAuth [post] | ||
216 | +func (this *VodController) CreateStsAuth() { | ||
217 | + var msg *domain.ResponseMessage | ||
218 | + defer func() { | ||
219 | + this.Resp(msg) | ||
220 | + }() | ||
221 | + var request []string | ||
222 | + if err := json.Unmarshal(this.ByteBody, &request); err != nil { | ||
223 | + log.Error(err) | ||
224 | + msg = domain.BadRequestParam(1) | ||
225 | + return | ||
226 | + } | ||
227 | + header := controllers.GetRequestHeader(this.Ctx) | ||
228 | + msg = domain.NewReturnResponse(oss.CreateStsAuth(header, request)) | ||
229 | +} |
@@ -86,5 +86,18 @@ func init() { | @@ -86,5 +86,18 @@ func init() { | ||
86 | AllowHTTPMethods: []string{"post"}, | 86 | AllowHTTPMethods: []string{"post"}, |
87 | MethodParams: param.Make(), | 87 | MethodParams: param.Make(), |
88 | Params: nil}) | 88 | Params: nil}) |
89 | - | 89 | + beego.GlobalControllerRouter["openapi/pkg/port/beego/controllers/v1:VodController"] = append(beego.GlobalControllerRouter["openapi/pkg/port/beego/controllers/v1:VodController"], |
90 | + beego.ControllerComments{ | ||
91 | + Method: "PutObject", | ||
92 | + Router: `/putObject`, | ||
93 | + AllowHTTPMethods: []string{"post"}, | ||
94 | + MethodParams: param.Make(), | ||
95 | + Params: nil}) | ||
96 | + beego.GlobalControllerRouter["openapi/pkg/port/beego/controllers/v1:VodController"] = append(beego.GlobalControllerRouter["openapi/pkg/port/beego/controllers/v1:VodController"], | ||
97 | + beego.ControllerComments{ | ||
98 | + Method: "CreateStsAuth", | ||
99 | + Router: `/createStsAuth`, | ||
100 | + AllowHTTPMethods: []string{"post"}, | ||
101 | + MethodParams: param.Make(), | ||
102 | + Params: nil}) | ||
90 | } | 103 | } |
-
请 注册 或 登录 后发表评论