From f16f5f1041e568164a9058ce7231e49ec579621e Mon Sep 17 00:00:00 2001 From: lewis <747342561@qq.com> Date: Fri, 29 Oct 2021 19:33:58 +0800 Subject: [PATCH] download-cb2-model --- modules/storage/obs.go | 40 +++++++++++-------- routers/repo/cloudbrain.go | 28 ------------- routers/repo/modelarts.go | 13 ++++++ .../modelarts/trainjob/models/dir_list.tmpl | 2 +- .../repo/modelarts/trainjob/models/index.tmpl | 2 +- 5 files changed, 39 insertions(+), 46 deletions(-) diff --git a/modules/storage/obs.go b/modules/storage/obs.go index 697ced6c5..bd73281d0 100755 --- a/modules/storage/obs.go +++ b/modules/storage/obs.go @@ -181,17 +181,28 @@ func GetObsListObject(jobName, parentDir string) ([]FileInfo, error) { output, err := ObsCli.ListObjects(input) fileInfos := make([]FileInfo, 0) if err == nil { - for index, val := range output.Contents { - log.Info("Content[%d]-OwnerId:%s, ETag:%s, Key:%s, LastModified:%s, Size:%d\n", - index, val.Owner.ID, val.ETag, val.Key, val.LastModified, val.Size) + for _, val := range output.Contents { str1 := strings.Split(val.Key, "/") - fileName := str1[len(str1)-1] - log.Info("", fileName) + var isDir bool + var fileName,nextParentDir string + if strings.HasSuffix(val.Key, "/") { + fileName = str1[len(str1)-2] + isDir = true + nextParentDir = fileName + if fileName == parentDir || (fileName + "/") == setting.OutPutPath { + continue + } + } else { + fileName = str1[len(str1)-1] + isDir = false + } + fileInfo := FileInfo{ ModTime: val.LastModified.Format("2006-01-02 15:04:05"), FileName: fileName, Size: val.Size, - IsDir:false, + IsDir:isDir, + ParenDir: nextParentDir, } fileInfos = append(fileInfos, fileInfo) } @@ -227,20 +238,17 @@ func ObsGenMultiPartSignedUrl(uuid string, uploadId string, partNumber int, file return output.SignedUrl, nil } -func GetObsCreateSignedUrl(uuid string, uploadId string, partNumber int, fileName string) (string, error) { - +func GetObsCreateSignedUrl(jobName, parentDir, fileName string) (string, error) { input := &obs.CreateSignedUrlInput{} input.Bucket = setting.Bucket - input.Key = strings.TrimPrefix(path.Join(setting.BasePath, path.Join(uuid[0:1], uuid[1:2], uuid, fileName)), "/") + input.Key = strings.TrimPrefix(path.Join(setting.TrainJobModelPath, jobName, setting.OutPutPath, parentDir, fileName), "/") + input.Expires = 60 * 60 - input.Method = obs.HttpMethodPut - - input.QueryParams = map[string]string{ - "partNumber": com.ToStr(partNumber, 10), - "uploadId": uploadId, - //"partSize": com.ToStr(partSize,10), - } + input.Method = obs.HttpMethodGet + reqParams := make(map[string]string) + reqParams["response-content-disposition"] = "attachment; filename=\"" + fileName + "\"" + input.QueryParams = reqParams output, err := ObsCli.CreateSignedUrl(input) if err != nil { log.Error("CreateSignedUrl failed:", err.Error()) diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index d5bc85a30..a49d4026f 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -583,34 +583,6 @@ func CloudBrainDownloadModel(ctx *context.Context) { http.Redirect(ctx.Resp, ctx.Req.Request, url, http.StatusMovedPermanently) } -func TrainJobDownloadModel(ctx *context.Context) { - JobName := ctx.Query("JobName") - fileName := ctx.Query("file_name") - - body, err := storage.ObsModelDownload(JobName, fileName) - if err != nil { - log.Info("download error.") - } else { - defer body.Close() - ctx.Resp.Header().Set("Content-Disposition", "attachment; filename="+fileName) - ctx.Resp.Header().Set("Content-Type", "application/octet-stream") - p := make([]byte, 1024) - var readErr error - var readCount int - // 读取对象内容 - for { - readCount, readErr = body.Read(p) - if readCount > 0 { - ctx.Resp.Write(p[:readCount]) - //fmt.Printf("%s", p[:readCount]) - } - if readErr != nil { - break - } - } - } -} - func GetRate(ctx *context.Context) { var jobID = ctx.Params(":jobid") job, err := models.GetCloudbrainByJobID(jobID) diff --git a/routers/repo/modelarts.go b/routers/repo/modelarts.go index 2c8f8f617..166fe6704 100755 --- a/routers/repo/modelarts.go +++ b/routers/repo/modelarts.go @@ -1086,3 +1086,16 @@ func TrainJobShowModels(ctx *context.Context) { ctx.Data["JobID"] = jobID ctx.HTML(200, tplModelArtsTrainJobShowModels) } + +func TrainJobDownloadModel(ctx *context.Context) { + parentDir := ctx.Query("parentDir") + fileName := ctx.Query("fileName") + jobName := ctx.Query("jobName") + url, err := storage.GetObsCreateSignedUrl(jobName, parentDir, fileName) + if err != nil { + log.Error("GetObsCreateSignedUrl failed: %v", err.Error(), ctx.Data["msgID"]) + ctx.ServerError("GetObsCreateSignedUrl", err) + return + } + http.Redirect(ctx.Resp, ctx.Req.Request, url, http.StatusMovedPermanently) +} diff --git a/templates/repo/modelarts/trainjob/models/dir_list.tmpl b/templates/repo/modelarts/trainjob/models/dir_list.tmpl index a9683de77..9e92681e5 100755 --- a/templates/repo/modelarts/trainjob/models/dir_list.tmpl +++ b/templates/repo/modelarts/trainjob/models/dir_list.tmpl @@ -6,7 +6,7 @@ - + {{if .IsDir}} {{svg "octicon-file-directory" 16}}{{else}}{{svg "octicon-file" 16}}{{end}} {{.FileName}} diff --git a/templates/repo/modelarts/trainjob/models/index.tmpl b/templates/repo/modelarts/trainjob/models/index.tmpl index 3b53ad78e..9ca62dc2c 100755 --- a/templates/repo/modelarts/trainjob/models/index.tmpl +++ b/templates/repo/modelarts/trainjob/models/index.tmpl @@ -16,7 +16,7 @@
- {{template "repo/cloudbrain/models/dir_list" .}} + {{template "repo/modelarts/trainjob/models/dir_list" .}}