Commit 9dfa7766 by Li Feifei

Merge branch 'test'

parents ba2cc7eb 8e0acaf3
stages:
- build
- make
- deploy
variables:
VERSION: "3.$CI_PIPELINE_ID"
BUILDDIR: "/builds"
LOCALDIR: "/opt/gitlab-runner/builds"
NAMESPACE: "srs-prd"
ppt-server-build:
stage: build
tags:
- test-ppt-server-shell
only:
- test
retry: 2
script:
#- GO111MODULE=auto
#- mkdir -p ${BUILDDIR}/ppt-server
#- rm -rf ${BUILDDIR}/ppt-server/*
#- go build -o ${BUILDDIR}/ppt-server/ppt-server
#- cp -f Dockerfile ${BUILDDIR}/ppt-server/
#- cp -rf conf ${BUILDDIR}/ppt-server/
#- cd ${BUILDDIR}/ppt-server/
- docker build -t registry.cn-beijing.aliyuncs.com/offcn_llive/ppt-server:$VERSION .
- docker push registry.cn-beijing.aliyuncs.com/offcn_llive/ppt-server:$VERSION
- docker rmi registry.cn-beijing.aliyuncs.com/offcn_llive/ppt-server:$VERSION &
ppt-server-deploy:
stage: deploy
tags:
- test-ppt-server-shell
only:
- test
retry: 2
before_script:
- CLUSTER="hb2-center"
script:
- set -x
- for cs in ${CLUSTER[@]};do \
- kubectl set image -n ${NAMESPACE} deployment/ppt-server-deployment ppt-server=registry.cn-beijing.aliyuncs.com/offcn_llive/ppt-server:$VERSION; \
- done
\ No newline at end of file
FROM registry.cn-beijing.aliyuncs.com/offcn_llive/go:build as build
COPY . /tmp/develop
RUN cd /tmp/develop \
&& go build -o /tmp/ppt-server main.go
#FROM debian:buster-slim
FROM registry.cn-beijing.aliyuncs.com/offcn_llive/go:runtime-alpine-3.10
ENV branch test
ENV rb_host rmq-cluster-balancer
ENV rb_user video
ENV rb_pass 1fqH4WFR19uckgRyHzgISw
ENV read_sql rr-2ze1xl88115o8i2umlo.mysql.rds.aliyuncs.com
ENV read_user video
ENV read_pass 'vlty&AxMwT$lmLv6bN8dkDuBYlh%N5pe'
ENV write_sql rm-2zevlk47ul0ovuci80o.mysql.rds.aliyuncs.com
ENV write_user video
ENV write_pass 'vlty&AxMwT$lmLv6bN8dkDuBYlh%N5pe'
COPY --chown=1000:1000 --from=build /tmp/ppt-server /src/ppt-server/
COPY --chown=1000:1000 conf/ /src/ppt-server/conf
RUN chmod +x /src/ppt-server/ppt-server
WORKDIR /src/ppt-server/
CMD ["./ppt-server"]
\ No newline at end of file
appname = ppt_server appname = ppt_server
httpport = 8081 httpport = 80
runmode = dev runmode = dev
autorender = false autorender = false
copyrequestbody = true copyrequestbody = true
......
...@@ -27,6 +27,10 @@ func (this *UploadController) newResponse(code int, msg string) { ...@@ -27,6 +27,10 @@ func (this *UploadController) newResponse(code int, msg string) {
this.ServeJSON() this.ServeJSON()
} }
func (this *UploadController) Get() {
this.newResponse(200, "成功")
}
func (this *UploadController) Post() { func (this *UploadController) Post() {
u := models.XyuSmallTempFiles{} u := models.XyuSmallTempFiles{}
...@@ -35,7 +39,7 @@ func (this *UploadController) Post() { ...@@ -35,7 +39,7 @@ func (this *UploadController) Post() {
this.newResponse(100, "参数绑定失败") this.newResponse(100, "参数绑定失败")
return return
} }
if u.RoomNum == "" || u.Uuid == "" || u.Url == "" || u.Type == 0 { if u.RoomNum == "" || u.Uuid == "" || u.Url == "" {
this.newResponse(100, "参数不正确") this.newResponse(100, "参数不正确")
return return
} }
......
...@@ -88,13 +88,15 @@ type XyuSmallRoomRecord struct { ...@@ -88,13 +88,15 @@ type XyuSmallRoomRecord struct {
} }
type XyuSmallTempFiles struct { type XyuSmallTempFiles struct {
Id int Id int
RoomNum string `form:"room_num"` RoomNum string `form:"room_num"`
Type int `form:"type"` Name string `form:"name"`
Url string `form:"url"` Nickanem string `form:"nickname"`
Time string `form:"time"'` Type int `form:"type"`
Uuid string `form:"uuid"` Url string `form:"url"`
Status int Time string `form:"time"'`
Uuid string `form:"uuid"`
Status int
} }
type XyuRoomFiles struct { type XyuRoomFiles struct {
......
...@@ -3,7 +3,6 @@ package upload ...@@ -3,7 +3,6 @@ package upload
import ( import (
"archive/zip" "archive/zip"
"crypto/md5" "crypto/md5"
"crypto/sha1"
"encoding/hex" "encoding/hex"
"encoding/json" "encoding/json"
"errors" "errors"
...@@ -80,12 +79,14 @@ func Down(v *models.XyuSmallTempFiles) { ...@@ -80,12 +79,14 @@ func Down(v *models.XyuSmallTempFiles) {
url, _ := Qurl.QueryUnescape(v.Url) url, _ := Qurl.QueryUnescape(v.Url)
filename := path.Base(url) filename := path.Base(url)
filePath := "/data/files/" + filename filePath := "/data/files/" + filename
objectName := v.Url[strings.Index(v.Url, "com/")+4:]
// 文件以及存在就不需要下载 // 文件以及存在就不需要下载
if _, err := os.Stat(filePath); err != nil { if _, err := os.Stat(filePath); err != nil {
// Get the data // Get the data
resp, err := http.Get(url) resp, err := http.Get(url)
if err != nil { if err != nil {
UpdateFileError("1", v.Uuid, v.RoomNum, objectName)
fmt.Println(err) fmt.Println(err)
return return
} }
...@@ -94,6 +95,7 @@ func Down(v *models.XyuSmallTempFiles) { ...@@ -94,6 +95,7 @@ func Down(v *models.XyuSmallTempFiles) {
out, err := os.Create(filePath) out, err := os.Create(filePath)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
UpdateFileError("1", v.Uuid, v.RoomNum, objectName)
return return
} }
defer out.Close() defer out.Close()
...@@ -102,6 +104,7 @@ func Down(v *models.XyuSmallTempFiles) { ...@@ -102,6 +104,7 @@ func Down(v *models.XyuSmallTempFiles) {
_, err = io.Copy(out, resp.Body) _, err = io.Copy(out, resp.Body)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
UpdateFileError("1", v.Uuid, v.RoomNum, objectName)
return return
} }
} }
...@@ -130,13 +133,17 @@ func Down(v *models.XyuSmallTempFiles) { ...@@ -130,13 +133,17 @@ func Down(v *models.XyuSmallTempFiles) {
t := time.Now() t := time.Now()
now := fmt.Sprintf("%02d-%02d-%02d %02d:%02d:%02d", now := fmt.Sprintf("%02d-%02d-%02d %02d:%02d:%02d",
t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second()) t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second())
slice_path := strings.Split(objectName, "/")
fmt.Println(slice_path[2])
room_file["room_id"] = room.Id room_file["room_id"] = room.Id
room_file["id"] = t.Unix() room_file["id"] = t.Unix()
room_file["is_courseware"] = "1" room_file["is_courseware"] = "1"
room_file["private"] = "1" room_file["private"] = "1"
room_file["nickname"] = "助教" room_file["nickname"] = v.Nickanem
room_file["name"] = filename room_file["name"] = v.Name
room_file["time"] = now room_file["time"] = now
room_file["uuid"] = v.Uuid
if v.Type == 1 { if v.Type == 1 {
room_file["is_material"] = 1 room_file["is_material"] = 1
} else if v.Type == 2 { } else if v.Type == 2 {
...@@ -144,12 +151,8 @@ func Down(v *models.XyuSmallTempFiles) { ...@@ -144,12 +151,8 @@ func Down(v *models.XyuSmallTempFiles) {
} else if v.Type == 3 { } else if v.Type == 3 {
room_file["is_titlebook"] = 1 room_file["is_titlebook"] = 1
} }
contentHash := slice_path[2]
contentHash, _ := fileContentHash(file) room_file["file_name_hash"] = slice_path[3]
fileHash := []byte(filename)
fileHashName := fmt.Sprintf("%x", sha1.Sum(fileHash))
room_file["file_name_hash"] = fileHashName
room_file["hash"] = contentHash room_file["hash"] = contentHash
//获取文件后缀 //获取文件后缀
...@@ -176,10 +179,11 @@ func Down(v *models.XyuSmallTempFiles) { ...@@ -176,10 +179,11 @@ func Down(v *models.XyuSmallTempFiles) {
return return
} }
defer fd.Close() defer fd.Close()
objectPath := "documents/" + v.RoomNum + "/" + contentHash + "/" + fileHashName + "/"
objectName := objectPath + contentHash + ext
fmt.Println("objectName == ", objectName) fmt.Println("objectName == ", objectName)
room_file["path"] = objectPath objectPath := objectName[0:strings.LastIndex(objectName, "/")]+"/"
room_file["path"] = objectName
err = bucket.PutObject(objectName, fd) err = bucket.PutObject(objectName, fd)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
...@@ -189,11 +193,12 @@ func Down(v *models.XyuSmallTempFiles) { ...@@ -189,11 +193,12 @@ func Down(v *models.XyuSmallTempFiles) {
maps, err := getFileInfo(furl) maps, err := getFileInfo(furl)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
UpdateFileError("2", v.Uuid, v.RoomNum, objectName)
return return
} }
room_file["files_size"] = strconv.Itoa(int(maps["FileSize"].(float64))) room_file["files_size"] = strconv.Itoa(int(maps["FileSize"].(float64)))
room_file["link"] = furl room_file["link"] = v.Url
wordFloat64 := getWords(maps) wordFloat64 := getWords(maps)
...@@ -203,6 +208,7 @@ func Down(v *models.XyuSmallTempFiles) { ...@@ -203,6 +208,7 @@ func Down(v *models.XyuSmallTempFiles) {
err := uploadPacked(bucket, filename, contentHash, objectPath, err := uploadPacked(bucket, filename, contentHash, objectPath,
wordFloat64) wordFloat64)
if err != nil { if err != nil {
UpdateFileError("6", v.Uuid, v.RoomNum, objectName)
fmt.Println(err) fmt.Println(err)
return return
} }
...@@ -210,11 +216,13 @@ func Down(v *models.XyuSmallTempFiles) { ...@@ -210,11 +216,13 @@ func Down(v *models.XyuSmallTempFiles) {
ch := make(chan bool) ch := make(chan bool)
go func() { go func() {
err := downloadFile(downUrl, func(length, downLen int64) { err := downloadFile(downUrl, contentHash ,func(length, downLen int64) {
}) })
if err == nil { if err == nil {
ch <- true ch <- true
} else {
UpdateFileError("3", v.Uuid, v.RoomNum, objectName)
} }
}() }()
<-ch <-ch
...@@ -224,6 +232,7 @@ func Down(v *models.XyuSmallTempFiles) { ...@@ -224,6 +232,7 @@ func Down(v *models.XyuSmallTempFiles) {
reader, err := zip.OpenReader( "/data/files/" + contentHash + ".zip") reader, err := zip.OpenReader( "/data/files/" + contentHash + ".zip")
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
UpdateFileError("4", v.Uuid, v.RoomNum, objectName)
return return
} }
ch1 := make(chan bool) ch1 := make(chan bool)
...@@ -242,6 +251,7 @@ func Down(v *models.XyuSmallTempFiles) { ...@@ -242,6 +251,7 @@ func Down(v *models.XyuSmallTempFiles) {
return return
} }
} }
UpdateFileError("5", v.Uuid, v.RoomNum, objectName)
ch1 <- false ch1 <- false
return return
} else { } else {
...@@ -260,6 +270,7 @@ func Down(v *models.XyuSmallTempFiles) { ...@@ -260,6 +270,7 @@ func Down(v *models.XyuSmallTempFiles) {
defer reader.Close() defer reader.Close()
fmt.Println(uploadImageCount, wordFloat64) fmt.Println(uploadImageCount, wordFloat64)
if uploadImageCount != wordFloat64 { if uploadImageCount != wordFloat64 {
UpdateFileError("5", v.Uuid, v.RoomNum, objectName)
fmt.Println("上传失败") fmt.Println("上传失败")
return return
} }
...@@ -358,6 +369,52 @@ func webToken() (*http.Client, string, error) { ...@@ -358,6 +369,52 @@ func webToken() (*http.Client, string, error) {
} }
} }
func UpdateFileError(code , uuid, room_num, path string) error {
vv := Qurl.Values{}
vv.Add("code", code)
vv.Add("uuid", uuid)
vv.Add("room_num",room_num)
vv.Add("path", path)
client, token, err := webToken()
if err != nil {
fmt.Println("token 获取失败", err)
return err
}
vv.Add("_token", token)
body := vv.Encode()
payload := strings.NewReader(body)
req, err := http.NewRequest("POST",WEBURL + "/web/room_files_error", payload)
if err != nil {
fmt.Println("123")
return err
}
req.Header.Add("content-type", "multipart/form-data")
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
res, err := client.Do(req)
if err != nil {
fmt.Println("5555")
return err
}
defer res.Body.Close()
post_body, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.Println("456")
return err
}
map2 := make(map[string]interface{})
err = json.Unmarshal(post_body, &map2)
if err != nil {
fmt.Println("678")
return err
}
if int(map2["code"].(float64)) != 200 {
return errors.New("消息下发失败")
}
return nil
}
func createFileDataBase(room_file map[string]interface{}) error { func createFileDataBase(room_file map[string]interface{}) error {
vv := Qurl.Values{} vv := Qurl.Values{}
...@@ -519,7 +576,7 @@ func fileContentHash(file io.Reader) (string, []byte) { ...@@ -519,7 +576,7 @@ func fileContentHash(file io.Reader) (string, []byte) {
return fmt.Sprintf("%s", hex.EncodeToString(result)), b return fmt.Sprintf("%s", hex.EncodeToString(result)), b
} }
func downloadFile(url string, fb func(length, downLen int64)) error { func downloadFile(url, contentHash string, fb func(length, downLen int64)) error {
var ( var (
fsize int64 fsize int64
buf = make([]byte, 32*1024) buf = make([]byte, 32*1024)
...@@ -539,15 +596,10 @@ func downloadFile(url string, fb func(length, downLen int64)) error { ...@@ -539,15 +596,10 @@ func downloadFile(url string, fb func(length, downLen int64)) error {
fmt.Println(err) fmt.Println(err)
} }
//创建文件 //创建文件
var filenameWithSuffix string
filenameWithSuffix = path.Base(url) //获取文件名带后缀
var fileSuffix string
fileSuffix = path.Ext(filenameWithSuffix) //获取文件后缀
var filenameOnly string
filenameOnly = strings.Replace(filenameWithSuffix, fileSuffix, ".zip", -1) //获取文件名 file, err := os.Create("/data/files/" + contentHash+".zip")
file, err := os.Create("/data/files/" + filenameOnly)
if err != nil { if err != nil {
return err return err
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment