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.
85 lines
1.9 KiB
85 lines
1.9 KiB
5 months ago
|
package qiniu
|
||
|
|
||
|
import (
|
||
|
"crypto/hmac"
|
||
|
"crypto/sha1"
|
||
|
"encoding/base64"
|
||
|
"encoding/json"
|
||
|
"io/ioutil"
|
||
|
"math"
|
||
|
"net/http"
|
||
|
"pure/global"
|
||
|
"strconv"
|
||
|
|
||
|
"github.com/pili-engineering/pili-sdk-go.v2/pili"
|
||
|
)
|
||
|
|
||
|
// 计算token并加入Header
|
||
|
func createAuthorization(req *http.Request, reqBody []byte) *http.Request {
|
||
|
var (
|
||
|
str string
|
||
|
hashed []byte
|
||
|
)
|
||
|
|
||
|
str = req.Method + " " + req.URL.Path
|
||
|
if req.URL.RawQuery != "" {
|
||
|
str += "?" + req.URL.RawQuery
|
||
|
}
|
||
|
str += "\nHost: " + req.Host
|
||
|
if contentType := req.Header.Get("Content-Type"); contentType != "" {
|
||
|
str += "\nContent-Type: " + contentType
|
||
|
}
|
||
|
str += "\n\n"
|
||
|
if len(reqBody) != 0 {
|
||
|
str += string(reqBody)
|
||
|
}
|
||
|
key := []byte(global.MG_CONFIG.Qiniu.SecretKey)
|
||
|
mac := hmac.New(sha1.New, key)
|
||
|
mac.Write([]byte(str))
|
||
|
hashed = mac.Sum(nil)
|
||
|
req.Header.Add("Authorization", "Qiniu "+global.MG_CONFIG.Qiniu.AccessKey+":"+base64.URLEncoding.EncodeToString(hashed))
|
||
|
return req
|
||
|
}
|
||
|
|
||
|
func getVideoInfo(url string) (result VideoInfo, err error) {
|
||
|
resp, err := http.Get(url + "?avinfo")
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
defer resp.Body.Close()
|
||
|
resBody, err := ioutil.ReadAll(resp.Body)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
//fmt.Println(string(resBody))
|
||
|
global.MG_LOG.Info(string(resBody))
|
||
|
err = json.Unmarshal(resBody, &result)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func GetVideoLen(url string) int {
|
||
|
info, err := getVideoInfo(url)
|
||
|
if err != nil {
|
||
|
return 0
|
||
|
}
|
||
|
f1, err := strconv.ParseFloat(info.Format.Duration, 64)
|
||
|
if err != nil {
|
||
|
return 0
|
||
|
}
|
||
|
s1 := strconv.FormatFloat(math.Floor(f1), 'f', -1, 64)
|
||
|
i, _ := strconv.Atoi(s1)
|
||
|
return i
|
||
|
}
|
||
|
|
||
|
func ReturnUrl2(key, zone, domain string, start, end int64) (string, error) {
|
||
|
mac := &pili.MAC{AccessKey: global.MG_CONFIG.Qiniu.AccessKey, SecretKey: []byte(global.MG_CONFIG.Qiniu.SecretKey)}
|
||
|
client := pili.New(mac, nil)
|
||
|
hub := client.Hub(zone)
|
||
|
stream := hub.Stream(key)
|
||
|
fName, err := stream.Save(start, end)
|
||
|
if err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
return "http://" + domain + "/" + fName, nil
|
||
|
}
|