Browse Source

提交增加OBS上传代理代码。

Signed-off-by: zouap <zouap@pcl.ac.cn>
tags/v1.21.12.1
zouap 4 years ago
parent
commit
5cc2e4b45d
4 changed files with 64 additions and 9 deletions
  1. +5
    -0
      modules/setting/setting.go
  2. +28
    -1
      modules/storage/obs.go
  3. +28
    -7
      routers/repo/attachment.go
  4. +3
    -1
      routers/routes/routes.go

+ 5
- 0
modules/setting/setting.go View File

@@ -490,6 +490,9 @@ var (
Index string Index string
TimeField string TimeField string
ElkTimeFormat string ElkTimeFormat string

//nginx proxy
PROXYURL string
) )


// DateLang transforms standard language locale name to corresponding value in datetime plugin. // DateLang transforms standard language locale name to corresponding value in datetime plugin.
@@ -1196,6 +1199,7 @@ func NewContext() {
Location = sec.Key("LOCATION").MustString("cn-south-222") Location = sec.Key("LOCATION").MustString("cn-south-222")
BasePath = sec.Key("BASE_PATH").MustString("attachment/") BasePath = sec.Key("BASE_PATH").MustString("attachment/")
UserBasePath = sec.Key("BASE_PATH_USER").MustString("users/") UserBasePath = sec.Key("BASE_PATH_USER").MustString("users/")
PROXYURL = sec.Key("PROXY_URL").MustString("")


sec = Cfg.Section("modelarts") sec = Cfg.Section("modelarts")
ModelArtsHost = sec.Key("ENDPOINT").MustString("112.95.163.80") ModelArtsHost = sec.Key("ENDPOINT").MustString("112.95.163.80")
@@ -1217,6 +1221,7 @@ func NewContext() {
Index = sec.Key("INDEX").MustString("filebeat-7.3.2*") Index = sec.Key("INDEX").MustString("filebeat-7.3.2*")
TimeField = sec.Key("TIMEFIELD").MustString(" @timestamptest") TimeField = sec.Key("TIMEFIELD").MustString(" @timestamptest")
ElkTimeFormat = sec.Key("ELKTIMEFORMAT").MustString("date_time") ElkTimeFormat = sec.Key("ELKTIMEFORMAT").MustString("date_time")

} }


func loadInternalToken(sec *ini.Section) string { func loadInternalToken(sec *ini.Section) string {


+ 28
- 1
modules/storage/obs.go View File

@@ -5,11 +5,13 @@
package storage package storage


import ( import (
"github.com/unknwon/com"
"io"
"path" "path"
"strconv" "strconv"
"strings" "strings"


"github.com/unknwon/com"

"code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/obs" "code.gitea.io/gitea/modules/obs"
"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"
@@ -102,6 +104,31 @@ func CompleteObsMultiPartUpload(uuid, uploadID, fileName string) error {
return nil return nil
} }


func ObsMultiPartUpload(uuid string, uploadId string, partNumber int, fileName string, putBody io.ReadCloser) error {
input := &obs.UploadPartInput{}
input.Bucket = setting.Bucket
input.Key = strings.TrimPrefix(path.Join(setting.BasePath, path.Join(uuid[0:1], uuid[1:2], uuid, fileName)), "/")
input.UploadId = uploadId
input.PartNumber = partNumber
input.Body = putBody
output, err := ObsCli.UploadPart(input)
if err == nil {
log.Info("RequestId:%s\n", output.RequestId)
log.Info("ETag:%s\n", output.ETag)
return nil
} else {
if obsError, ok := err.(obs.ObsError); ok {
log.Info(obsError.Code)
log.Info(obsError.Message)
return obsError
} else {
log.Error("error:", err)
return err
}
}

}

func ObsGenMultiPartSignedUrl(uuid string, uploadId string, partNumber int, fileName string) (string, error) { func ObsGenMultiPartSignedUrl(uuid string, uploadId string, partNumber int, fileName string) (string, error) {


input := &obs.CreateSignedUrlInput{} input := &obs.CreateSignedUrlInput{}


+ 28
- 7
routers/repo/attachment.go View File

@@ -662,6 +662,24 @@ func NewMultipart(ctx *context.Context) {
} }
} }


func PutOBSProxyUpload(ctx *context.Context) {
uuid := ctx.Query("uuid")
uploadID := ctx.Query("uploadId")
partNumber := ctx.QueryInt("partNumber")
fileName := ctx.Query("file_name")

RequestBody := ctx.Req.Body()
if RequestBody == nil {
ctx.Error(500, fmt.Sprintf("FormFile: %v", RequestBody))
return
}

err := storage.ObsMultiPartUpload(uuid, uploadID, partNumber, fileName, RequestBody.ReadCloser())
if err != nil {
log.Info("upload error.")
}
}

func GetMultipartUploadUrl(ctx *context.Context) { func GetMultipartUploadUrl(ctx *context.Context) {
uuid := ctx.Query("uuid") uuid := ctx.Query("uuid")
uploadID := ctx.Query("uploadID") uploadID := ctx.Query("uploadID")
@@ -689,14 +707,17 @@ func GetMultipartUploadUrl(ctx *context.Context) {
return return
} }
} else { } else {
url, err = storage.ObsGenMultiPartSignedUrl(uuid, uploadID, partNumber, fileName)
if err != nil {
ctx.Error(500, fmt.Sprintf("ObsGenMultiPartSignedUrl failed: %v", err))
return
if setting.PROXYURL != "" {
url = setting.PROXYURL + "?uuid=" + uuid + "&uploadId=" + uploadID + "&partNumber=" + fmt.Sprint(partNumber) + "&file_name=" + fileName
log.Info("return url=" + url)
} else {
url, err = storage.ObsGenMultiPartSignedUrl(uuid, uploadID, partNumber, fileName)
if err != nil {
ctx.Error(500, fmt.Sprintf("ObsGenMultiPartSignedUrl failed: %v", err))
return
}
log.Info("url=" + url)
} }

log.Info("url=" + url)

} }


ctx.JSON(200, map[string]string{ ctx.JSON(200, map[string]string{


+ 3
- 1
routers/routes/routes.go View File

@@ -6,13 +6,14 @@ package routes


import ( import (
"bytes" "bytes"
"code.gitea.io/gitea/routers/operation"
"encoding/gob" "encoding/gob"
"net/http" "net/http"
"path" "path"
"text/template" "text/template"
"time" "time"


"code.gitea.io/gitea/routers/operation"

"code.gitea.io/gitea/routers/secure" "code.gitea.io/gitea/routers/secure"


"code.gitea.io/gitea/models" "code.gitea.io/gitea/models"
@@ -565,6 +566,7 @@ func RegisterRoutes(m *macaron.Macaron) {
m.Post("/private", repo.UpdatePublicAttachment) m.Post("/private", repo.UpdatePublicAttachment)
m.Get("/get_chunks", repo.GetSuccessChunks) m.Get("/get_chunks", repo.GetSuccessChunks)
m.Get("/new_multipart", repo.NewMultipart) m.Get("/new_multipart", repo.NewMultipart)
m.Get("/obs_proxy_multipart", repo.PutOBSProxyUpload)
m.Get("/get_multipart_url", repo.GetMultipartUploadUrl) m.Get("/get_multipart_url", repo.GetMultipartUploadUrl)
m.Post("/complete_multipart", repo.CompleteMultipart) m.Post("/complete_multipart", repo.CompleteMultipart)
m.Post("/update_chunk", repo.UpdateMultipart) m.Post("/update_chunk", repo.UpdateMultipart)


Loading…
Cancel
Save