Browse Source

Merge branch 'modelarts' of git.pcl.ac.cn:yoyoyard/opendata into modelarts

master
Gitea 4 years ago
parent
commit
b5808b65da
4 changed files with 105 additions and 19 deletions
  1. +59
    -6
      modules/obs/temporary.go
  2. +4
    -3
      modules/storage/obs.go
  3. +41
    -10
      routers/repo/attachment.go
  4. +1
    -0
      routers/routes/routes.go

+ 59
- 6
modules/obs/temporary.go View File

@@ -791,8 +791,8 @@ func (obsClient ObsClient) GetBucketRequestPaymentWithSignedUrl(signedUrl string
}


func (obsClient ObsClient) CreateUploadPartSignedUrl(bucketName, objectKey, uploadId string, partNumber int, partSize int64) (string, error) {
requestURL := ""
func (obsClient ObsClient) CreateUploadPartSignedUrl(bucketName, objectKey, uploadId string, partNumber int, partSize int64) (*http.Request, error) {
var req *http.Request

input := &UploadPartInput{}
input.Bucket = bucketName
@@ -808,7 +808,7 @@ func (obsClient ObsClient) CreateUploadPartSignedUrl(bucketName, objectKey, uplo

params, headers, _, err := input.trans(obsClient.conf.signature == SignatureObs)
if err != nil {
return requestURL, err
return req, err
}

if params == nil {
@@ -833,10 +833,63 @@ func (obsClient ObsClient) CreateUploadPartSignedUrl(bucketName, objectKey, uplo

headers["Content-Length"] = []string{com.ToStr(partNumber,10)}

requestURL, err = obsClient.doAuth(HTTP_PUT, bucketName, objectKey, params, headers, "")
requestURL, err := obsClient.doAuth(HTTP_PUT, bucketName, objectKey, params, headers, "")
if err != nil {
return requestURL, nil
return req, nil
}

return requestURL, nil
var _data io.Reader
req, err = http.NewRequest(HTTP_PUT, requestURL, _data)
if obsClient.conf.ctx != nil {
req = req.WithContext(obsClient.conf.ctx)
}
if err != nil {
return req, err
}

if isDebugLogEnabled() {
auth := headers[HEADER_AUTH_CAMEL]
delete(headers, HEADER_AUTH_CAMEL)

var isSecurityToken bool
var securityToken []string
if securityToken, isSecurityToken = headers[HEADER_STS_TOKEN_AMZ]; isSecurityToken {
headers[HEADER_STS_TOKEN_AMZ] = []string{"******"}
} else if securityToken, isSecurityToken = headers[HEADER_STS_TOKEN_OBS]; isSecurityToken {
headers[HEADER_STS_TOKEN_OBS] = []string{"******"}
}
doLog(LEVEL_DEBUG, "Request headers: %v", headers)
headers[HEADER_AUTH_CAMEL] = auth
if isSecurityToken {
if obsClient.conf.signature == SignatureObs {
headers[HEADER_STS_TOKEN_OBS] = securityToken
} else {
headers[HEADER_STS_TOKEN_AMZ] = securityToken
}
}
}

for key, value := range headers {
if key == HEADER_HOST_CAMEL {
req.Host = value[0]
delete(headers, key)
} else if key == HEADER_CONTENT_LENGTH_CAMEL {
req.ContentLength = StringToInt64(value[0], -1)
delete(headers, key)
} else {
req.Header[key] = value
}
}

var lastRequest *http.Request
lastRequest = req

req.Header[HEADER_USER_AGENT_CAMEL] = []string{USER_AGENT}

if lastRequest != nil {
req.Host = lastRequest.Host
req.ContentLength = lastRequest.ContentLength
}

return req, nil
}

+ 4
- 3
modules/storage/obs.go View File

@@ -140,14 +140,15 @@ func ObsGenMultiPartSignedUrl(uuid string, uploadId string, partNumber int, part
*/

Key := strings.TrimPrefix(path.Join(setting.BasePath, path.Join(uuid[0:1], uuid[1:2], uuid)), "/")
url, err := ObsCli.CreateUploadPartSignedUrl(setting.Bucket, Key, uploadId, partNumber, partSize)
req, err := ObsCli.CreateUploadPartSignedUrl(setting.Bucket, Key, uploadId, partNumber, partSize)
if err != nil {
log.Error("CreateSignedUrl failed:", err.Error())
return "", err
}

log.Info(url)
log.Info(req.URL.String())
log.Info("", req.Header)

return url, nil
return req.URL.String(), nil

}

+ 41
- 10
routers/repo/attachment.go View File

@@ -11,6 +11,7 @@ import (
"fmt"
"mime/multipart"
"net/http"
"path"
"strconv"
"strings"

@@ -275,13 +276,29 @@ func GetPresignedPutObjectURL(ctx *context.Context) {

// AddAttachment response for add attachment record
func AddAttachment(ctx *context.Context) {
uuid := ctx.Query("uuid")
has, err := storage.Attachments.HasObject(models.AttachmentRelativePath(uuid))
typeCloudBrain := ctx.QueryInt("type")
err := checkTypeCloudBrain(typeCloudBrain)
if err != nil {
ctx.ServerError("HasObject", err)
ctx.ServerError("checkTypeCloudBrain failed", err)
return
}

uuid := ctx.Query("uuid")
has := false
if typeCloudBrain == models.TypeCloudBrainOne {
has, err = storage.Attachments.HasObject(models.AttachmentRelativePath(uuid))
if err != nil {
ctx.ServerError("HasObject", err)
return
}
} else {
has, err = storage.ObsHasObject(models.AttachmentRelativePath(uuid))
if err != nil {
ctx.ServerError("ObsHasObject", err)
return
}
}

if !has {
ctx.Error(404, "attachment has not been uploaded")
return
@@ -294,6 +311,7 @@ func AddAttachment(ctx *context.Context) {
Name: ctx.Query("file_name"),
Size: ctx.QueryInt64("size"),
DatasetID: ctx.QueryInt64("dataset_id"),
Type: typeCloudBrain,
})

if err != nil {
@@ -303,16 +321,19 @@ func AddAttachment(ctx *context.Context) {

if attachment.DatasetID != 0 {
if strings.HasSuffix(attachment.Name, ".zip") {
err = worker.SendDecompressTask(contexExt.Background(), uuid)
if err != nil {
log.Error("SendDecompressTask(%s) failed:%s", uuid, err.Error())
} else {
attachment.DecompressState = models.DecompressStateIng
err = models.UpdateAttachment(attachment)
if typeCloudBrain == models.TypeCloudBrainOne {
err = worker.SendDecompressTask(contexExt.Background(), uuid)
if err != nil {
log.Error("UpdateAttachment state(%s) failed:%s", uuid, err.Error())
log.Error("SendDecompressTask(%s) failed:%s", uuid, err.Error())
} else {
attachment.DecompressState = models.DecompressStateIng
err = models.UpdateAttachment(attachment)
if err != nil {
log.Error("UpdateAttachment state(%s) failed:%s", uuid, err.Error())
}
}
}
//todo:decompress type_two
}
}

@@ -581,6 +602,16 @@ func GetMultipartUploadUrl(ctx *context.Context) {
})
}

func GetObsKey(ctx *context.Context) {
uuid := gouuid.NewV4().String()
key := strings.TrimPrefix(path.Join(setting.BasePath, path.Join(uuid[0:1], uuid[1:2], uuid)), "/")

ctx.JSON(200, map[string]string{
"uuid": uuid,
"key": key,
})
}

func UploadPart(ctx *context.Context) {
tmp, err := ctx.Req.Body().String()
log.Info(tmp)


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

@@ -530,6 +530,7 @@ func RegisterRoutes(m *macaron.Macaron) {
m.Post("/complete_multipart", repo.CompleteMultipart)
m.Post("/update_chunk", repo.UpdateMultipart)
m.Post("/upload_part", repo.UploadPart)
m.Get("/get_obs_key", repo.GetObsKey)
}, reqSignIn)

m.Group("/attachments", func() {


Loading…
Cancel
Save