diff --git a/modules/storage/minio_ext.go b/modules/storage/minio_ext.go index 69151b11e..d4a8abba5 100755 --- a/modules/storage/minio_ext.go +++ b/modules/storage/minio_ext.go @@ -267,6 +267,23 @@ func MinioCopyFiles(bucketName string, srcPath string, destPath string, Files [] return fileTotalSize, nil } +func MinioCopyAFile(srcBucketName, srcObjectName, destBucketName, destObjectName string) (int64, error) { + _, core, err := getClients() + var fileTotalSize int64 + fileTotalSize = 0 + if err != nil { + log.Error("getClients failed:", err.Error()) + return fileTotalSize, err + } + meta, err := core.StatObject(srcBucketName, srcObjectName, miniov6.StatObjectOptions{}) + if err != nil { + log.Info("Get file error:" + err.Error()) + } + core.CopyObject(srcBucketName, srcObjectName, destBucketName, destObjectName, meta.UserMetadata) + fileTotalSize = meta.Size + return fileTotalSize, nil +} + func MinioPathCopy(bucketName string, srcPath string, destPath string) (int64, error) { _, core, err := getClients() var fileTotalSize int64 diff --git a/modules/storage/obs.go b/modules/storage/obs.go index affdfc475..83b03ed44 100755 --- a/modules/storage/obs.go +++ b/modules/storage/obs.go @@ -294,7 +294,7 @@ func ObsCopyManyFile(srcBucket string, srcPath string, destBucket string, destPa log.Info("Get File error, error=" + err.Error()) continue } - obsCopyFile(srcBucket, srcKey, destBucket, destKey) + ObsCopyFile(srcBucket, srcKey, destBucket, destKey) fileTotalSize += out.ContentLength } @@ -318,7 +318,7 @@ func ObsCopyAllFile(srcBucket string, srcPath string, destBucket string, destPat index++ for _, val := range output.Contents { destKey := destPath + val.Key[length:] - obsCopyFile(srcBucket, val.Key, destBucket, destKey) + ObsCopyFile(srcBucket, val.Key, destBucket, destKey) fileTotalSize += val.Size } if output.IsTruncated { @@ -337,7 +337,7 @@ func ObsCopyAllFile(srcBucket string, srcPath string, destBucket string, destPat return fileTotalSize, nil } -func obsCopyFile(srcBucket string, srcKeyName string, destBucket string, destKeyName string) error { +func ObsCopyFile(srcBucket string, srcKeyName string, destBucket string, destKeyName string) error { input := &obs.CopyObjectInput{} input.Bucket = destBucket input.Key = destKeyName diff --git a/routers/repo/attachment.go b/routers/repo/attachment.go index 271183e65..de1869f1f 100755 --- a/routers/repo/attachment.go +++ b/routers/repo/attachment.go @@ -551,6 +551,7 @@ func GetSuccessChunks(ctx *context.Context) { typeCloudBrain := ctx.QueryInt("type") fileName := ctx.Query("file_name") scene := ctx.Query("scene") + modeluuid := ctx.Query("modeluuid") log.Info("scene=" + scene) var chunks string @@ -664,24 +665,50 @@ func GetSuccessChunks(ctx *context.Context) { } if scene == Attachment_model { //使用description存储模型信息 - modeluuid := attach.Description + dbmodeluuid := attach.Description modelname := "" - if modeluuid != "" { - model, err := models.QueryModelById(modeluuid) + if dbmodeluuid != modeluuid { + model, err := models.QueryModelById(dbmodeluuid) + if err == nil { + modelname = model.Name + } + //copy + srcObjectName := fileChunk.ObjectName + destObjectName := getObjectName(fileName, modeluuid) + if typeCloudBrain == models.TypeCloudBrainOne { + bucketName := setting.Attachment.Minio.Bucket + storage.MinioCopyAFile(bucketName, srcObjectName, bucketName, destObjectName) + } else { + bucketName := setting.Bucket + storage.ObsCopyFile(bucketName, srcObjectName, bucketName, destObjectName) + } + UpdateModelSize(modeluuid) + ctx.JSON(200, map[string]string{ + "uuid": fileChunk.UUID, + "uploaded": strconv.Itoa(fileChunk.IsUploaded), + "uploadID": fileChunk.UploadID, + "chunks": string(chunks), + "attachID": strconv.Itoa(int(attachID)), + "fileName": attach.Name, + }) + return + } else { + model, err := models.QueryModelById(dbmodeluuid) if err == nil { modelname = model.Name } + ctx.JSON(200, map[string]string{ + "uuid": fileChunk.UUID, + "uploaded": strconv.Itoa(fileChunk.IsUploaded), + "uploadID": fileChunk.UploadID, + "chunks": string(chunks), + "attachID": strconv.Itoa(int(attachID)), + "modeluuid": dbmodeluuid, + "fileName": attach.Name, + "modelName": modelname, + }) + return } - ctx.JSON(200, map[string]string{ - "uuid": fileChunk.UUID, - "uploaded": strconv.Itoa(fileChunk.IsUploaded), - "uploadID": fileChunk.UploadID, - "chunks": string(chunks), - "attachID": strconv.Itoa(int(attachID)), - "modeluuid": modeluuid, - "fileName": attach.Name, - "modelName": modelname, - }) } else { dataset, err := models.GetDatasetByID(attach.DatasetID) if err != nil { @@ -702,6 +729,10 @@ func GetSuccessChunks(ctx *context.Context) { } } +func getObjectName(filename string, modeluuid string) string { + return strings.TrimPrefix(path.Join(Model_prefix, path.Join(modeluuid[0:1], modeluuid[1:2], modeluuid, filename)), "/") +} + func getMinioInitObjectName(scene string, uuid, modeluuid string, filename string) string { if scene == Attachment_model { return strings.TrimPrefix(path.Join(Model_prefix, path.Join(modeluuid[0:1], modeluuid[1:2], modeluuid, filename)), "/")