Skip to content

Release v3.3.0

Choose a tag to compare

@github-actions github-actions released this 18 Jul 00:30
· 6 commits to main since this release

[v3.3.0] - 2026-07-18

特性

受限流式读取

  • 新增 Java 8 兼容的 ReadObjectRangeCommand 和 getInputStream(ReadObjectRangeCommand) 接口。
  • 使用 offset + length 表达单个对象字节区间,避免 Java API 直接暴露原始 HTTP Range 字符串。
  • 在请求前校验负数、零长度和 long 溢出,调用方负责关闭返回的输入流。
  • 对 Bucket 不存在、对象不存在、Range 越界、权限不足和其他读取失败提供明确领域错误码。
  • 文件预览与 HTTP Range 下载链路复用类型化区间读取实现。
  • bucket 为空时通过 OssQueryService.getDefaultBucketName() 解析默认 Bucket,统一内置实现与第三方适配器契约。
  • 原始 Range 字符串重载保留用于兼容,并标记为过时。

服务端复制

  • 对象不超过 5 GB 时使用单次 CopyObject,超过阈值时自动切换为 multipart upload 与 UploadPartCopy。
  • 使用 oss.part-size-in-mb 作为基础分片大小,必要时自动增大,限制在 10,000 个分片内,并支持最大约 48.8 TiB 的 S3 对象。
  • 分片复制按 min(oss.max-connections, 8) 受控并发提交,当前窗口结束后再进入下一批。
  • 分片复制保留常用 HTTP 元数据、自定义 metadata 和对象标签。
  • 复制时优先固定源对象版本,否则使用 ETag 条件,避免复制过程中源内容发生变化。
  • 任一分片或完成阶段失败时自动中止 multipart upload,并保留中止失败的 suppressed exception。
  • 同一并发窗口的多个分片失败会完整聚合;线程中断时先等待在途分片收敛,再恢复中断标记并执行 abort。
  • 增加复制计划、完成结果和失败结果日志,记录策略、分片参数、并发度、耗时和错误码。
  • copyFile() 和移动对象内部复制统一复用同一条单次/分片路由。
  • CopyObjectCommand 支持指定 sourceVersionId,可把历史版本复制回同一对象 key。
  • Bucket 时间回滚复用自动单次/分片复制链路,支持恢复超过 5 GB 的历史对象。

分片上传完整性

  • ChunkMerge 新增必填的 expectedPartCount 和 expectedSize。
  • 合并前回查服务端真实分片,校验连续编号、ETag、分片数量和字节总量。
  • 分片上传校验 part number、uploadId、空内容及声明长度与实际字节数。

流式解压安全

  • 拒绝绝对路径、Windows 盘符以及 .、.. 路径段。
  • 限制最多 10,000 个条目、单条目 5 GiB 和累计解压 50 GiB。

测试

  • 增加默认 Bucket 类型化 Range 的 MinIO 集成测试。
  • 增加由 OSS_RUN_LARGE_COPY_TEST=true 显式启用的 5 GB 以上服务端分片复制慢速测试。

修复

  • 大对象移动与普通复制统一执行源版本或 ETag 一致性校验。
  • 对象流式读取不再把 NoSuchBucket 错误误报为对象不存在。
  • 分片复制使用 AWS SDK Tagging 模型传递标签,移除手工 URL 编码。
  • 复制错误区分对象或 Bucket 不存在、权限不足、源对象变化和服务端复制能力不支持。
  • oss.part-size-in-mb 增加 5120 MB 上限校验,并同步到 Boot 2/3/4 配置绑定。
  • 移动源对象删除增加 ETag If-Match 条件,避免并发覆盖后误删新对象。
  • 目录前缀不再通过扩展名推断,修复带点号目录扩大列表或删除范围的问题;空前缀递归删除被拒绝。
  • checkExist 和删除前存在性检查仅把明确 404 视为不存在,不再隐藏权限、网络和服务端故障。
  • 复制完成后的验证失败使用 OBJECT_COPY_COMPLETED_VERIFY_FAILED,明确目标可能已经写入。
  • Bucket 回滚仅允许版本控制状态为 Enabled,版本状态查询不再折叠权限和服务端错误。
  • 手工分片合并不再接受缺片、ETag 不一致或总大小错误的请求。
  • 对象预览与下载在流式读取返回 OBJECT_NOT_FOUND 时恢复为 404 响应。