diff --git a/models/cloudbrain.go b/models/cloudbrain.go index 44b177471..480350c8d 100755 --- a/models/cloudbrain.go +++ b/models/cloudbrain.go @@ -1631,12 +1631,12 @@ func CloudbrainAll(opts *CloudbrainsOptions) ([]*CloudbrainInfo, int64, error) { var err error condition := "cloudbrain.user_id = `user`.id" if len(opts.Keyword) == 0 { - count, err = sess.Where(cond).Count(new(Cloudbrain)) + count, err = sess.Unscoped().Where(cond).Count(new(Cloudbrain)) } else { lowerKeyWord := strings.ToLower(opts.Keyword) cond = cond.And(builder.Or(builder.Like{"LOWER(cloudbrain.job_name)", lowerKeyWord}, builder.Like{"LOWER(cloudbrain.display_job_name)", lowerKeyWord}, builder.Like{"`user`.lower_name", lowerKeyWord})) - count, err = sess.Table(&Cloudbrain{}).Where(cond). + count, err = sess.Table(&Cloudbrain{}).Unscoped().Where(cond). Join("left", "`user`", condition).Count(new(CloudbrainInfo)) } diff --git a/modules/storage/minio_ext.go b/modules/storage/minio_ext.go index 2f738ebad..167cd0488 100755 --- a/modules/storage/minio_ext.go +++ b/modules/storage/minio_ext.go @@ -2,6 +2,7 @@ package storage import ( "encoding/xml" + "errors" "path" "sort" "strconv" @@ -129,7 +130,7 @@ func NewMultiPartUpload(uuid string) (string, error) { return core.NewMultipartUpload(bucketName, objectName, miniov6.PutObjectOptions{}) } -func CompleteMultiPartUpload(uuid string, uploadID string) (string, error) { +func CompleteMultiPartUpload(uuid string, uploadID string, totalChunks int) (string, error) { client, core, err := getClients() if err != nil { log.Error("getClients failed:", err.Error()) @@ -146,6 +147,11 @@ func CompleteMultiPartUpload(uuid string, uploadID string) (string, error) { return "", err } + if len(partInfos) != totalChunks { + log.Error("ListObjectParts number(%d) is not equal the set total chunk number(%d)", len(partInfos), totalChunks) + return "", errors.New("the parts is not complete") + } + var complMultipartUpload completeMultipartUpload for _, partInfo := range partInfos { complMultipartUpload.Parts = append(complMultipartUpload.Parts, miniov6.CompletePart{ diff --git a/modules/storage/obs.go b/modules/storage/obs.go index 2b52ab603..03349864a 100755 --- a/modules/storage/obs.go +++ b/modules/storage/obs.go @@ -85,7 +85,7 @@ func listAllParts(uuid, uploadID, key string) (output *obs.ListPartsOutput, err }) } - if len(temp.Parts) < temp.MaxParts { + if !temp.IsTruncated { break } else { continue @@ -128,7 +128,7 @@ func NewObsMultiPartUpload(uuid, fileName string) (string, error) { return output.UploadId, nil } -func CompleteObsMultiPartUpload(uuid, uploadID, fileName string) error { +func CompleteObsMultiPartUpload(uuid, uploadID, fileName string, totalChunks int) error { input := &obs.CompleteMultipartUploadInput{} input.Bucket = setting.Bucket input.Key = strings.TrimPrefix(path.Join(setting.BasePath, path.Join(uuid[0:1], uuid[1:2], uuid, fileName)), "/") @@ -140,6 +140,11 @@ func CompleteObsMultiPartUpload(uuid, uploadID, fileName string) error { return err } + if len(allParts.Parts) != totalChunks { + log.Error("listAllParts number(%d) is not equal the set total chunk number(%d)", len(allParts.Parts), totalChunks) + return errors.New("the parts is not complete") + } + input.Parts = allParts.Parts output, err := ObsCli.CompleteMultipartUpload(input) diff --git a/routers/api/v1/repo/cloudbrain_dashboard.go b/routers/api/v1/repo/cloudbrain_dashboard.go index b979729a8..2090a2cf2 100644 --- a/routers/api/v1/repo/cloudbrain_dashboard.go +++ b/routers/api/v1/repo/cloudbrain_dashboard.go @@ -23,7 +23,7 @@ func DownloadCloudBrainBoard(ctx *context.Context) { _, total, err := models.CloudbrainAll(&models.CloudbrainsOptions{ ListOptions: models.ListOptions{ Page: page, - PageSize: 1, + PageSize: pageSize, }, Type: models.TypeCloudBrainAll, NeedRepoInfo: false, diff --git a/routers/repo/attachment.go b/routers/repo/attachment.go index ccedbdf1b..aa52a1400 100755 --- a/routers/repo/attachment.go +++ b/routers/repo/attachment.go @@ -855,13 +855,13 @@ func CompleteMultipart(ctx *context.Context) { } if typeCloudBrain == models.TypeCloudBrainOne { - _, err = storage.CompleteMultiPartUpload(uuid, uploadID) + _, err = storage.CompleteMultiPartUpload(uuid, uploadID, fileChunk.TotalChunks) if err != nil { ctx.Error(500, fmt.Sprintf("CompleteMultiPartUpload failed: %v", err)) return } } else { - err = storage.CompleteObsMultiPartUpload(uuid, uploadID, fileName) + err = storage.CompleteObsMultiPartUpload(uuid, uploadID, fileName, fileChunk.TotalChunks) if err != nil { ctx.Error(500, fmt.Sprintf("CompleteObsMultiPartUpload failed: %v", err)) return diff --git a/routers/user/home.go b/routers/user/home.go index 9c7bed2df..d92bc31c6 100755 --- a/routers/user/home.go +++ b/routers/user/home.go @@ -804,6 +804,7 @@ func Cloudbrains(ctx *context.Context) { repos, _, err := models.SearchRepository(&models.SearchRepoOptions{ Actor: ctx.User, OwnerID: ctxUser.ID, + Private: true, }) if err != nil { ctx.ServerError("SearchRepository", err) diff --git a/templates/admin/cloudbrain/list.tmpl b/templates/admin/cloudbrain/list.tmpl index 35c08eeef..cf5df847c 100755 --- a/templates/admin/cloudbrain/list.tmpl +++ b/templates/admin/cloudbrain/list.tmpl @@ -162,9 +162,9 @@ {{end}} -
diff --git a/templates/user/dashboard/cloudbrains.tmpl b/templates/user/dashboard/cloudbrains.tmpl index ba8ec10f8..0b0776c9b 100644 --- a/templates/user/dashboard/cloudbrains.tmpl +++ b/templates/user/dashboard/cloudbrains.tmpl @@ -147,9 +147,9 @@ {{end}} - diff --git a/web_src/js/components/MinioUploader.vue b/web_src/js/components/MinioUploader.vue index 95f5e7e59..b47700e20 100755 --- a/web_src/js/components/MinioUploader.vue +++ b/web_src/js/components/MinioUploader.vue @@ -193,6 +193,9 @@ export default { const time = new Date().getTime(); this.status = this.dropzoneParams.data('md5-computing'); file.totalChunkCounts = chunks; + if (file.size==0) { + file.totalChunkCounts = 1 + } loadMd5Next(); fileReader.onload = (e) => { diff --git a/web_src/js/index.js b/web_src/js/index.js index c558e7624..59024912d 100755 --- a/web_src/js/index.js +++ b/web_src/js/index.js @@ -3878,7 +3878,7 @@ function initVueDataset() { }, }, components: { - MinioUploader, + MinioUploader }, mounted(){ // if(document.getElementById('postPath')){ @@ -4403,7 +4403,6 @@ function initVueDataAnalysis() { render: h => h(DataAnalysis) }); } - function initVueWxAutorize() { const el = document.getElementById('WxAutorize'); if (!el) {