From e23af286fc034fa25e3e13431d6b3c3648a4974c Mon Sep 17 00:00:00 2001 From: lewis <747342561@qq.com> Date: Wed, 20 Apr 2022 11:35:32 +0800 Subject: [PATCH 1/2] opt for upload dataset --- modules/storage/minio_ext.go | 8 +++++++- modules/storage/obs.go | 9 +++++++-- routers/repo/attachment.go | 4 ++-- web_src/js/index.js | 18 +----------------- 4 files changed, 17 insertions(+), 22 deletions(-) diff --git a/modules/storage/minio_ext.go b/modules/storage/minio_ext.go index 2f738ebadc..167cd0488b 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 2b52ab603e..03349864ac 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/repo/attachment.go b/routers/repo/attachment.go index b2ded263ef..f283093f1f 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/web_src/js/index.js b/web_src/js/index.js index 6fdd68d8d3..a5ad3512d7 100755 --- a/web_src/js/index.js +++ b/web_src/js/index.js @@ -34,7 +34,6 @@ import { } from './features/notification.js'; import {createCodeEditor} from './features/codeeditor.js'; import MinioUploader from './components/MinioUploader.vue'; -import ObsUploader from './components/ObsUploader.vue'; import EditAboutInfo from './components/EditAboutInfo.vue'; // import Images from './components/Images.vue'; import EditTopics from './components/EditTopics.vue'; @@ -2958,7 +2957,6 @@ $(document).ready(async () => { initCodeView(); initVueApp(); initVueUploader(); - initObsUploader(); initVueDataset(); initVueEditAbout(); initVueEditTopic(); @@ -3854,8 +3852,7 @@ function initVueDataset() { }, }, components: { - MinioUploader, - ObsUploader + MinioUploader }, mounted(){ // if(document.getElementById('postPath')){ @@ -4380,19 +4377,6 @@ function initVueDataAnalysis() { render: h => h(DataAnalysis) }); } -// 新增 -function initObsUploader() { - const el = document.getElementById('obsUploader'); - if (!el) { - return; - } - - new Vue({ - el: '#obsUploader', - components: {ObsUploader}, - template: '' - }); -} function initVueWxAutorize() { const el = document.getElementById('WxAutorize'); if (!el) { -- 2.34.1 From 099223ab9ac045046710a5a513c17db43d07f885 Mon Sep 17 00:00:00 2001 From: lewis <747342561@qq.com> Date: Wed, 20 Apr 2022 14:28:15 +0800 Subject: [PATCH 2/2] fix bug --- web_src/js/components/MinioUploader.vue | 3 +++ 1 file changed, 3 insertions(+) diff --git a/web_src/js/components/MinioUploader.vue b/web_src/js/components/MinioUploader.vue index 95f5e7e593..b47700e205 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) => { -- 2.34.1