diff --git a/server/internal/file/internal/logic/fileupload/uploadfilelogic.go b/server/internal/file/internal/logic/fileupload/uploadfilelogic.go index 3cf4d25f..005687ff 100644 --- a/server/internal/file/internal/logic/fileupload/uploadfilelogic.go +++ b/server/internal/file/internal/logic/fileupload/uploadfilelogic.go @@ -27,6 +27,11 @@ type UploadFileLogic struct { c *gin.Context } +type partETag struct { + PartNumber int + ETag string +} + func NewUploadFileLogic(ctx context.Context, cfg *config.Config, c *gin.Context) *UploadFileLogic { return &UploadFileLogic{ Logger: logx.WithContext(ctx), @@ -135,7 +140,7 @@ func (l *UploadFileLogic) UploadFile() (resp *types.UploadFileResp, err error) { const partSize = 100 * 1024 // 100KB totalSize := fileHeader.Size partCount := (totalSize + partSize - 1) / partSize - var partETags []oss.PartETag + var partETags []oss.UploadPart // 修正:使用 SDK 内置类型 // 重置文件指针 if _, err = file.Seek(0, 0); err != nil { @@ -163,15 +168,15 @@ func (l *UploadFileLogic) UploadFile() (resp *types.UploadFileResp, err error) { if partEnd > totalSize { partEnd = totalSize } - partLen := partEnd - partStart + partLen := partEnd - partStart // int64 类型(正确) - // 读取分片数据 + // 读取分片数据(不变) data := make([]byte, partLen) if _, err = file.Seek(partStart, 0); err != nil { _ = bucket.AbortMultipartUpload(imur) l.c.JSON(http.StatusInternalServerError, gin.H{ "code": 500, - "message": fmt.Sprintf("定位分片%d失败", i), + "message": fmt.Sprintf("定位分片%d失败: %v", i, err), }) return } @@ -179,34 +184,34 @@ func (l *UploadFileLogic) UploadFile() (resp *types.UploadFileResp, err error) { _ = bucket.AbortMultipartUpload(imur) l.c.JSON(http.StatusInternalServerError, gin.H{ "code": 500, - "message": fmt.Sprintf("读取分片%d失败", i), + "message": fmt.Sprintf("读取分片%d失败: %v", i, err), }) return } - // 上传分片(旧版:传入 imur) - partResult, err := bucket.UploadPart(imur, i, bytes.NewReader(data)) + var partResult oss.UploadPart // 正确类型:分片上传结果 + // 关键修正:第三个参数是 i(int 类型,1 开始,符合 1-10000 范围) + partResult, err = bucket.UploadPart(imur, bytes.NewReader(data), partLen, i) if err != nil { _ = bucket.AbortMultipartUpload(imur) l.c.JSON(http.StatusInternalServerError, gin.H{ "code": 500, - "message": fmt.Sprintf("上传分片%d失败", i), + "message": fmt.Sprintf("上传分片%d失败: %v", i, err), }) return } - partETags = append(partETags, oss.PartETag{ + partETags = append(partETags, oss.UploadPart{ PartNumber: i, ETag: partResult.ETag, }) } - // 8.3 按分片号排序(必须) sort.Slice(partETags, func(i, j int) bool { return partETags[i].PartNumber < partETags[j].PartNumber }) - // 8.4 完成分片上传(旧版:传入 imur) + // 8.4 完成分片上传(类型已匹配,无报错) _, err = bucket.CompleteMultipartUpload(imur, partETags) if err != nil { _ = bucket.AbortMultipartUpload(imur)