#1973 规避数据集上传不完整的问题

Merged
lewis merged 4 commits from fix-1934 into V20220428 2 years ago
  1. +7
    -1
      modules/storage/minio_ext.go
  2. +7
    -2
      modules/storage/obs.go
  3. +2
    -2
      routers/repo/attachment.go
  4. +3
    -0
      web_src/js/components/MinioUploader.vue
  5. +1
    -2
      web_src/js/index.js

+ 7
- 1
modules/storage/minio_ext.go View File

@@ -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{


+ 7
- 2
modules/storage/obs.go View File

@@ -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)


+ 2
- 2
routers/repo/attachment.go View File

@@ -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


+ 3
- 0
web_src/js/components/MinioUploader.vue View File

@@ -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) => {


+ 1
- 2
web_src/js/index.js View File

@@ -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) {


Loading…
Cancel
Save