From b80b67b060c7425b2c954ac07392cad8e75039b5 Mon Sep 17 00:00:00 2001 From: Node <8974108+qwenode@users.noreply.github.com> Date: Fri, 24 May 2024 11:15:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8F=90=E5=8D=87=E5=88=86=E6=AE=B5?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E7=9A=84=E4=BD=93=E9=AA=8C?= =?UTF-8?q?=20(#5123)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 提升分段上传文件的体验 * 原新建文件 mode 为755,修正为644 --- backend/app/api/v1/file.go | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/backend/app/api/v1/file.go b/backend/app/api/v1/file.go index 44655811d..34eefc05b 100644 --- a/backend/app/api/v1/file.go +++ b/backend/app/api/v1/file.go @@ -592,7 +592,7 @@ func (b *BaseApi) Size(c *gin.Context) { helper.SuccessWithData(c, res) } -func mergeChunks(fileName string, fileDir string, dstDir string, chunkCount int) error { +func mergeChunks(fileName string, fileDir string, dstDir string, chunkCount int, overwrite bool) error { op := files.NewFileOp() dstDir = strings.TrimSpace(dstDir) mode, _ := files.GetParentMode(dstDir) @@ -604,8 +604,17 @@ func mergeChunks(fileName string, fileDir string, dstDir string, chunkCount int) return err } } - - targetFile, err := os.OpenFile(filepath.Join(dstDir, fileName), os.O_RDWR|os.O_CREATE, mode) + dstFileName := filepath.Join(dstDir, fileName) + dstInfo, statErr := os.Stat(dstFileName) + if statErr == nil { + mode = dstInfo.Mode() + } else { + mode = 0644 + } + if overwrite { + _ = os.Remove(dstFileName) + } + targetFile, err := os.OpenFile(dstFileName, os.O_RDWR|os.O_CREATE, mode) if err != nil { return err } @@ -704,7 +713,11 @@ func (b *BaseApi) UploadChunkFiles(c *gin.Context) { } if chunkIndex+1 == chunkCount { - err = mergeChunks(filename, fileDir, c.PostForm("path"), chunkCount) + overwrite := true + if ow := c.PostForm("overwrite"); ow != "" { + overwrite, _ = strconv.ParseBool(ow) + } + err = mergeChunks(filename, fileDir, c.PostForm("path"), chunkCount, overwrite) if err != nil { helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, buserr.WithMap(constant.ErrFileUpload, map[string]interface{}{"name": filename, "detail": err.Error()}, err)) return