|
|
|
@@ -1,6 +1,7 @@ |
|
|
|
package repo |
|
|
|
|
|
|
|
import ( |
|
|
|
"archive/zip" |
|
|
|
"errors" |
|
|
|
"fmt" |
|
|
|
"net/http" |
|
|
|
@@ -105,7 +106,7 @@ func SaveModel(ctx *context.Context) { |
|
|
|
func downloadModelFromCloudBrainTwo(modelUUID string, jobName string, parentDir string) (string, int64, error) { |
|
|
|
|
|
|
|
objectkey := strings.TrimPrefix(path.Join(setting.TrainJobModelPath, jobName, setting.OutPutPath, parentDir), "/") |
|
|
|
modelDbResult, err := storage.GetAllObsListObjectUnderDir(setting.Bucket, objectkey, "") |
|
|
|
modelDbResult, err := storage.GetOneLevelAllObjectUnderDir(setting.Bucket, objectkey, "") |
|
|
|
if err != nil { |
|
|
|
log.Info("get TrainJobListModel failed:", err) |
|
|
|
return "", 0, err |
|
|
|
@@ -119,21 +120,6 @@ func downloadModelFromCloudBrainTwo(modelUUID string, jobName string, parentDir |
|
|
|
|
|
|
|
size, err := storage.ObsCopyManyFile(setting.Bucket, prefix, setting.Bucket, destKeyNamePrefix) |
|
|
|
|
|
|
|
// for _, modelFile := range modelDbResult { |
|
|
|
// if modelFile.IsDir { |
|
|
|
// log.Info("copy dir, continue. dir=" + modelFile.FileName) |
|
|
|
// continue |
|
|
|
// } |
|
|
|
// srcKeyName := prefix + modelFile.FileName |
|
|
|
// log.Info("copy file, bucket=" + setting.Bucket + ", src keyname=" + srcKeyName) |
|
|
|
// destKeyName := destKeyNamePrefix + modelFile.FileName |
|
|
|
// log.Info("Dest key name=" + destKeyName) |
|
|
|
// err := storage.ObsCopyFile(setting.Bucket, srcKeyName, setting.Bucket, destKeyName) |
|
|
|
// if err != nil { |
|
|
|
// log.Info("copy failed.") |
|
|
|
// } |
|
|
|
// size += modelFile.Size |
|
|
|
// } |
|
|
|
dataActualPath := setting.Bucket + "/" + destKeyNamePrefix |
|
|
|
return dataActualPath, size, nil |
|
|
|
} |
|
|
|
@@ -177,10 +163,6 @@ func DeleteModelByID(id string) error { |
|
|
|
return err |
|
|
|
} |
|
|
|
|
|
|
|
func DownloadModel(ctx *context.Context) { |
|
|
|
log.Info("download model start.") |
|
|
|
} |
|
|
|
|
|
|
|
func QueryModelByParameters(repoId int64, page int) ([]*models.AiModelManage, int64, error) { |
|
|
|
|
|
|
|
return models.QueryModel(&models.AiModelQueryOptions{ |
|
|
|
@@ -198,6 +180,56 @@ func DownloadMultiModelFile(ctx *context.Context) { |
|
|
|
log.Info("DownloadMultiModelFile start.") |
|
|
|
id := ctx.Query("ID") |
|
|
|
log.Info("id=" + id) |
|
|
|
task, err := models.QueryModelById(id) |
|
|
|
if err != nil { |
|
|
|
log.Error("no such model!", err.Error()) |
|
|
|
ctx.ServerError("no such model:", err) |
|
|
|
return |
|
|
|
} |
|
|
|
path := Model_prefix + models.AttachmentRelativePath(id) + "/" |
|
|
|
returnFileName := task.Name + "_" + task.Version + ".zip" |
|
|
|
ctx.Resp.Header().Set("Content-Disposition", "attachment; filename="+returnFileName) |
|
|
|
ctx.Resp.Header().Set("Content-Type", "application/octet-stream") |
|
|
|
allFile, err := storage.GetAllObjectByBucketAndPrefix(setting.Bucket, path) |
|
|
|
if err != nil { |
|
|
|
|
|
|
|
w := zip.NewWriter(ctx.Resp) |
|
|
|
defer w.Close() |
|
|
|
|
|
|
|
for _, oneFile := range allFile { |
|
|
|
if !oneFile.IsDir { |
|
|
|
log.Info("zip file name:" + oneFile.FileName) |
|
|
|
fDest, err := w.Create(oneFile.FileName) |
|
|
|
if err != nil { |
|
|
|
log.Info("create zip entry error, download file failed: %s\n", err.Error()) |
|
|
|
ctx.ServerError("download file failed:", err) |
|
|
|
return |
|
|
|
} |
|
|
|
body, err := storage.ObsDownloadAFile(setting.Bucket, path+oneFile.FileName) |
|
|
|
if err != nil { |
|
|
|
log.Info("download file failed: %s\n", err.Error()) |
|
|
|
ctx.ServerError("download file failed:", err) |
|
|
|
return |
|
|
|
} else { |
|
|
|
defer body.Close() |
|
|
|
p := make([]byte, 1024) |
|
|
|
var readErr error |
|
|
|
var readCount int |
|
|
|
// 读取对象内容 |
|
|
|
for { |
|
|
|
readCount, readErr = body.Read(p) |
|
|
|
if readCount > 0 { |
|
|
|
fDest.Write(p[:readCount]) |
|
|
|
} |
|
|
|
if readErr != nil { |
|
|
|
break |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
func DownloadSingleModelFile(ctx *context.Context) { |
|
|
|
@@ -206,13 +238,39 @@ func DownloadSingleModelFile(ctx *context.Context) { |
|
|
|
parentDir := ctx.Query("parentDir") |
|
|
|
fileName := ctx.Query("fileName") |
|
|
|
path := Model_prefix + models.AttachmentRelativePath(id) + "/" + parentDir + fileName |
|
|
|
url, err := storage.GetObsCreateSignedUrlByBucketAndKey(setting.Bucket, path) |
|
|
|
if err != nil { |
|
|
|
log.Error("GetObsCreateSignedUrl failed: %v", err.Error(), ctx.Data["msgID"]) |
|
|
|
ctx.ServerError("GetObsCreateSignedUrl", err) |
|
|
|
return |
|
|
|
|
|
|
|
if setting.PROXYURL != "" { |
|
|
|
body, err := storage.ObsDownloadAFile(setting.Bucket, path) |
|
|
|
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 |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
url, err := storage.GetObsCreateSignedUrlByBucketAndKey(setting.Bucket, path) |
|
|
|
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) |
|
|
|
} |
|
|
|
http.Redirect(ctx.Resp, ctx.Req.Request, url, http.StatusMovedPermanently) |
|
|
|
} |
|
|
|
|
|
|
|
func ShowSingleModel(ctx *context.Context) { |
|
|
|
@@ -226,7 +284,7 @@ func ShowSingleModel(ctx *context.Context) { |
|
|
|
return |
|
|
|
} |
|
|
|
log.Info("bucket=" + setting.Bucket + " key=" + task.Path[len(setting.Bucket)+1:]) |
|
|
|
models, err := storage.GetAllObsListObjectUnderDir(setting.Bucket, task.Path[len(setting.Bucket)+1:], parentDir) |
|
|
|
models, err := storage.GetOneLevelAllObjectUnderDir(setting.Bucket, task.Path[len(setting.Bucket)+1:], parentDir) |
|
|
|
if err != nil { |
|
|
|
log.Info("get model list failed:", err) |
|
|
|
ctx.ServerError("GetObsListObject:", err) |
|
|
|
|