|
|
|
@@ -1,6 +1,7 @@ |
|
|
|
package repo |
|
|
|
|
|
|
|
import ( |
|
|
|
"archive/zip" |
|
|
|
"encoding/json" |
|
|
|
"errors" |
|
|
|
"io" |
|
|
|
@@ -1284,6 +1285,19 @@ func paramCheckCreateInferenceJob(form auth.CreateModelArtsInferenceJobForm) err |
|
|
|
return errors.New("计算节点数必须在1-25之间") |
|
|
|
} |
|
|
|
|
|
|
|
if form.ModelName == "" { |
|
|
|
log.Error("the ModelName(%d) must not be nil", form.ModelName) |
|
|
|
return errors.New("模型名称不能为空") |
|
|
|
} |
|
|
|
if form.ModelVersion == "" { |
|
|
|
log.Error("the ModelVersion(%d) must not be nil", form.ModelVersion) |
|
|
|
return errors.New("模型版本不能为空") |
|
|
|
} |
|
|
|
if form.CkptName == "" { |
|
|
|
log.Error("the CkptName(%d) must not be nil", form.CkptName) |
|
|
|
return errors.New("权重文件不能为空") |
|
|
|
} |
|
|
|
|
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
@@ -1564,6 +1578,7 @@ func InferenceJobCreate(ctx *context.Context, form auth.CreateModelArtsInference |
|
|
|
branch_name := form.BranchName |
|
|
|
FlavorName := form.FlavorName |
|
|
|
EngineName := form.EngineName |
|
|
|
LabelName := form.LabelName |
|
|
|
isLatestVersion := modelarts.IsLatestVersion |
|
|
|
VersionCount := modelarts.VersionCount |
|
|
|
trainUrl := form.TrainUrl |
|
|
|
@@ -1694,6 +1709,7 @@ func InferenceJobCreate(ctx *context.Context, form auth.CreateModelArtsInference |
|
|
|
Params: form.Params, |
|
|
|
FlavorName: FlavorName, |
|
|
|
EngineName: EngineName, |
|
|
|
LabelName: LabelName, |
|
|
|
IsLatestVersion: isLatestVersion, |
|
|
|
VersionCount: VersionCount, |
|
|
|
TotalVersionCount: modelarts.TotalVersionCount, |
|
|
|
@@ -2018,3 +2034,70 @@ func DeleteJobStorage(jobName string) error { |
|
|
|
|
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
func DownloadMultiResultFile(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 |
|
|
|
} |
|
|
|
if !isCanDeleteOrDownload(ctx, task) { |
|
|
|
ctx.ServerError("no right.", errors.New(ctx.Tr("repo.model_noright"))) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
path := Model_prefix + models.AttachmentRelativePath(id) + "/" |
|
|
|
|
|
|
|
allFile, err := storage.GetAllObjectByBucketAndPrefix(setting.Bucket, path) |
|
|
|
if err == nil { |
|
|
|
//count++ |
|
|
|
models.ModifyModelDownloadCount(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") |
|
|
|
w := zip.NewWriter(ctx.Resp) |
|
|
|
defer w.Close() |
|
|
|
for _, oneFile := range allFile { |
|
|
|
if oneFile.IsDir { |
|
|
|
log.Info("zip dir name:" + oneFile.FileName) |
|
|
|
} else { |
|
|
|
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 |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
log.Info("error,msg=" + err.Error()) |
|
|
|
ctx.ServerError("no file to download.", err) |
|
|
|
} |
|
|
|
} |