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
httpport = 8081
httpport = 80
runmode = dev
autorender = false
copyrequestbody = true
......
......@@ -27,6 +27,10 @@ func (this *UploadController) newResponse(code int, msg string) {
this.ServeJSON()
}
func (this *UploadController) Get() {
this.newResponse(200, "成功")
}
func (this *UploadController) Post() {
u := models.XyuSmallTempFiles{}
......@@ -35,7 +39,7 @@ func (this *UploadController) Post() {
this.newResponse(100, "参数绑定失败")
return
}
if u.RoomNum == "" || u.Uuid == "" || u.Url == "" || u.Type == 0 {
if u.RoomNum == "" || u.Uuid == "" || u.Url == "" {
this.newResponse(100, "参数不正确")
return
}
......
......@@ -90,6 +90,8 @@ type XyuSmallRoomRecord struct {
type XyuSmallTempFiles struct {
Id int
RoomNum string `form:"room_num"`
Name string `form:"name"`
Nickanem string `form:"nickname"`
Type int `form:"type"`
Url string `form:"url"`
Time string `form:"time"'`
......
......@@ -3,7 +3,6 @@ package upload
import (
"archive/zip"
"crypto/md5"
"crypto/sha1"
"encoding/hex"
"encoding/json"
"errors"
......@@ -80,12 +79,14 @@ func Down(v *models.XyuSmallTempFiles) {
url, _ := Qurl.QueryUnescape(v.Url)
filename := path.Base(url)
filePath := "/data/files/" + filename
objectName := v.Url[strings.Index(v.Url, "com/")+4:]
// 文件以及存在就不需要下载
if _, err := os.Stat(filePath); err != nil {
// Get the data
resp, err := http.Get(url)
if err != nil {
UpdateFileError("1", v.Uuid, v.RoomNum, objectName)
fmt.Println(err)
return
}
......@@ -94,6 +95,7 @@ func Down(v *models.XyuSmallTempFiles) {
out, err := os.Create(filePath)
if err != nil {
fmt.Println(err)
UpdateFileError("1", v.Uuid, v.RoomNum, objectName)
return
}
defer out.Close()
......@@ -102,6 +104,7 @@ func Down(v *models.XyuSmallTempFiles) {
_, err = io.Copy(out, resp.Body)
if err != nil {
fmt.Println(err)
UpdateFileError("1", v.Uuid, v.RoomNum, objectName)
return
}
}
......@@ -130,13 +133,17 @@ func Down(v *models.XyuSmallTempFiles) {
t := time.Now()
now := fmt.Sprintf("%02d-%02d-%02d %02d:%02d:%02d",
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["id"] = t.Unix()
room_file["is_courseware"] = "1"
room_file["private"] = "1"
room_file["nickname"] = "助教"
room_file["name"] = filename
room_file["nickname"] = v.Nickanem
room_file["name"] = v.Name
room_file["time"] = now
room_file["uuid"] = v.Uuid
if v.Type == 1 {
room_file["is_material"] = 1
} else if v.Type == 2 {
......@@ -144,12 +151,8 @@ func Down(v *models.XyuSmallTempFiles) {
} else if v.Type == 3 {
room_file["is_titlebook"] = 1
}
contentHash, _ := fileContentHash(file)
fileHash := []byte(filename)
fileHashName := fmt.Sprintf("%x", sha1.Sum(fileHash))
room_file["file_name_hash"] = fileHashName
contentHash := slice_path[2]
room_file["file_name_hash"] = slice_path[3]
room_file["hash"] = contentHash
//获取文件后缀
......@@ -176,10 +179,11 @@ func Down(v *models.XyuSmallTempFiles) {
return
}
defer fd.Close()
objectPath := "documents/" + v.RoomNum + "/" + contentHash + "/" + fileHashName + "/"
objectName := objectPath + contentHash + ext
fmt.Println("objectName == ", objectName)
room_file["path"] = objectPath
objectPath := objectName[0:strings.LastIndex(objectName, "/")]+"/"
room_file["path"] = objectName
err = bucket.PutObject(objectName, fd)
if err != nil {
fmt.Println(err)
......@@ -189,11 +193,12 @@ func Down(v *models.XyuSmallTempFiles) {
maps, err := getFileInfo(furl)
if err != nil {
fmt.Println(err)
UpdateFileError("2", v.Uuid, v.RoomNum, objectName)
return
}
room_file["files_size"] = strconv.Itoa(int(maps["FileSize"].(float64)))
room_file["link"] = furl
room_file["link"] = v.Url
wordFloat64 := getWords(maps)
......@@ -203,6 +208,7 @@ func Down(v *models.XyuSmallTempFiles) {
err := uploadPacked(bucket, filename, contentHash, objectPath,
wordFloat64)
if err != nil {
UpdateFileError("6", v.Uuid, v.RoomNum, objectName)
fmt.Println(err)
return
}
......@@ -210,11 +216,13 @@ func Down(v *models.XyuSmallTempFiles) {
ch := make(chan bool)
go func() {
err := downloadFile(downUrl, func(length, downLen int64) {
err := downloadFile(downUrl, contentHash ,func(length, downLen int64) {
})
if err == nil {
ch <- true
} else {
UpdateFileError("3", v.Uuid, v.RoomNum, objectName)
}
}()
<-ch
......@@ -224,6 +232,7 @@ func Down(v *models.XyuSmallTempFiles) {
reader, err := zip.OpenReader( "/data/files/" + contentHash + ".zip")
if err != nil {
fmt.Println(err)
UpdateFileError("4", v.Uuid, v.RoomNum, objectName)
return
}
ch1 := make(chan bool)
......@@ -242,6 +251,7 @@ func Down(v *models.XyuSmallTempFiles) {
return
}
}
UpdateFileError("5", v.Uuid, v.RoomNum, objectName)
ch1 <- false
return
} else {
......@@ -260,6 +270,7 @@ func Down(v *models.XyuSmallTempFiles) {
defer reader.Close()
fmt.Println(uploadImageCount, wordFloat64)
if uploadImageCount != wordFloat64 {
UpdateFileError("5", v.Uuid, v.RoomNum, objectName)
fmt.Println("上传失败")
return
}
......@@ -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 {
vv := Qurl.Values{}
......@@ -519,7 +576,7 @@ func fileContentHash(file io.Reader) (string, []byte) {
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 (
fsize int64
buf = make([]byte, 32*1024)
......@@ -539,15 +596,10 @@ func downloadFile(url string, fb func(length, downLen int64)) error {
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/" + filenameOnly)
file, err := os.Create("/data/files/" + contentHash+".zip")
if err != nil {
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