Reviewed-on: https://git.openi.org.cn/OpenI/aiforge/pulls/1489tags/v1.22.2.1
| @@ -1133,6 +1133,9 @@ func IsUsableRepoAlias(name string) error { | |||||
| // CreateRepository creates a repository for the user/organization. | // CreateRepository creates a repository for the user/organization. | ||||
| func CreateRepository(ctx DBContext, doer, u *User, repo *Repository, opts ...CreateRepoOptions) (err error) { | func CreateRepository(ctx DBContext, doer, u *User, repo *Repository, opts ...CreateRepoOptions) (err error) { | ||||
| if repo.Alias == "" { | |||||
| repo.Alias = repo.Name | |||||
| } | |||||
| repo.LowerAlias = strings.ToLower(repo.Alias) | repo.LowerAlias = strings.ToLower(repo.Alias) | ||||
| if err = IsUsableRepoName(repo.Name); err != nil { | if err = IsUsableRepoName(repo.Name); err != nil { | ||||
| return err | return err | ||||
| @@ -57,8 +57,8 @@ func ObsHasObject(path string) (bool, error) { | |||||
| return hasObject, nil | return hasObject, nil | ||||
| } | } | ||||
| func GetObsPartInfos(uuid string, uploadID string) (string, error) { | |||||
| key := strings.TrimPrefix(path.Join(setting.BasePath, path.Join(uuid[0:1], uuid[1:2], uuid, uuid)), "/") | |||||
| func GetObsPartInfos(uuid, uploadID, fileName string) (string, error) { | |||||
| key := strings.TrimPrefix(path.Join(setting.BasePath, path.Join(uuid[0:1], uuid[1:2], uuid, fileName)), "/") | |||||
| output, err := ObsCli.ListParts(&obs.ListPartsInput{ | output, err := ObsCli.ListParts(&obs.ListPartsInput{ | ||||
| Bucket: setting.Bucket, | Bucket: setting.Bucket, | ||||
| @@ -100,6 +100,10 @@ type CreateRepoOption struct { | |||||
| // required: true | // required: true | ||||
| // unique: true | // unique: true | ||||
| Name string `json:"name" binding:"Required;AlphaDashDot;MaxSize(100)"` | Name string `json:"name" binding:"Required;AlphaDashDot;MaxSize(100)"` | ||||
| // Alias of the repository to create | |||||
| // required: false | |||||
| // unique: true | |||||
| Alias string `json:"alias" binding:"AlphaDashDotChinese;MaxSize(100)"` | |||||
| // Description of the repository to create | // Description of the repository to create | ||||
| Description string `json:"description" binding:"MaxSize(255)"` | Description string `json:"description" binding:"MaxSize(255)"` | ||||
| // Whether the repository is private | // Whether the repository is private | ||||
| @@ -128,6 +128,9 @@ func addAlphaDashDotChineseRule() { | |||||
| return strings.HasPrefix(rule, "AlphaDashDotChinese") | return strings.HasPrefix(rule, "AlphaDashDotChinese") | ||||
| }, | }, | ||||
| IsValid: func(errs binding.Errors, name string, val interface{}) (bool, binding.Errors) { | IsValid: func(errs binding.Errors, name string, val interface{}) (bool, binding.Errors) { | ||||
| if val == "" { | |||||
| return true, errs | |||||
| } | |||||
| if !ValidAlphaDashDotChinese(fmt.Sprintf("%v", val)) { | if !ValidAlphaDashDotChinese(fmt.Sprintf("%v", val)) { | ||||
| errs.Add([]string{name}, ErrAlphaDashDotChinese, "ErrAlphaDashDotChinese") | errs.Add([]string{name}, ErrAlphaDashDotChinese, "ErrAlphaDashDotChinese") | ||||
| return false, errs | return false, errs | ||||
| @@ -232,6 +232,7 @@ func CreateUserRepo(ctx *context.APIContext, owner *models.User, opt api.CreateR | |||||
| } | } | ||||
| repo, err := repo_service.CreateRepository(ctx.User, owner, models.CreateRepoOptions{ | repo, err := repo_service.CreateRepository(ctx.User, owner, models.CreateRepoOptions{ | ||||
| Name: opt.Name, | Name: opt.Name, | ||||
| Alias: opt.Alias, | |||||
| Description: opt.Description, | Description: opt.Description, | ||||
| IssueLabels: opt.IssueLabels, | IssueLabels: opt.IssueLabels, | ||||
| Gitignores: opt.Gitignores, | Gitignores: opt.Gitignores, | ||||
| @@ -542,7 +542,7 @@ func GetSuccessChunks(ctx *context.Context) { | |||||
| log.Error("GetPartInfos failed:%v", err.Error()) | log.Error("GetPartInfos failed:%v", err.Error()) | ||||
| } | } | ||||
| } else { | } else { | ||||
| chunks, err = storage.GetObsPartInfos(fileChunk.UUID, fileChunk.UploadID) | |||||
| chunks, err = storage.GetObsPartInfos(fileChunk.UUID, fileChunk.UploadID, fileName) | |||||
| if err != nil { | if err != nil { | ||||
| log.Error("GetObsPartInfos failed:%v", err.Error()) | log.Error("GetObsPartInfos failed:%v", err.Error()) | ||||
| } | } | ||||
| @@ -350,6 +350,16 @@ export default { | |||||
| etags[currentChunk] = res.headers.etag; | etags[currentChunk] = res.headers.etag; | ||||
| } | } | ||||
| async function uploadMinioNewMethod(url,e){ | |||||
| var xhr = new XMLHttpRequest(); | |||||
| xhr.open('PUT', url, false); | |||||
| xhr.setRequestHeader('Content-Type', '') | |||||
| xhr.send(e.target.result); | |||||
| var etagValue = xhr.getResponseHeader('ETag'); | |||||
| //console.log(etagValue); | |||||
| etags[currentChunk] = etagValue; | |||||
| } | |||||
| async function updateChunk(currentChunk) { | async function updateChunk(currentChunk) { | ||||
| await axios.post( | await axios.post( | ||||
| '/attachments/update_chunk', | '/attachments/update_chunk', | ||||
| @@ -372,7 +382,7 @@ export default { | |||||
| await getUploadChunkUrl(currentChunk, partSize); | await getUploadChunkUrl(currentChunk, partSize); | ||||
| if (urls[currentChunk] != '') { | if (urls[currentChunk] != '') { | ||||
| // 上传到minio | // 上传到minio | ||||
| await uploadMinio(urls[currentChunk], e); | |||||
| await uploadMinioNewMethod(urls[currentChunk], e); | |||||
| if (etags[currentChunk] != '') { | if (etags[currentChunk] != '') { | ||||
| // 更新数据库:分片上传结果 | // 更新数据库:分片上传结果 | ||||
| //await updateChunk(currentChunk); | //await updateChunk(currentChunk); | ||||