You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET版S3Client未找到UploadPartCopy API如何实现S3分片拷贝

.NET版S3 SDK中UploadPartCopy能力的实现方式

你没有找到单独命名为UploadPartCopy的API不是查阅遗漏,该能力在.NET SDK中没有做独立的方法封装,而是复用了UploadPart/UploadPartAsync方法,通过请求参数区分是本地上传分片还是服务端拷贝分片。

具体使用规则如下:

  • 构造UploadPartRequest对象时,无需为InputStream属性传入本地文件/内存流,只要配置拷贝源相关参数,SDK就会自动调用S3的UploadPartCopy接口完成服务端侧分片拷贝,不会产生数据下载到本地再回传的传输开销。
  • 拷贝场景下UploadPartRequest的核心必填参数:
    • BucketName:分片上传的目标存储桶名
    • Key:分片上传的目标对象键
    • UploadId:之前初始化分片上传任务返回的上传任务ID
    • PartNumber:当前分片的序号,从1开始计数
    • CopySource:源对象路径,格式为/源存储桶名/源对象键
    • CopySourceRange:当前分片对应源对象的字节范围,格式为bytes=起始字节偏移-结束字节偏移
  • 所有分片拷贝完成后,和普通分片上传流程一致,收集每个分片返回的PartNumber和ETag,调用CompleteMultipartUpload/CompleteMultipartUploadAsync即可完成多对象合并为单个目标对象的操作。

最简代码示例:

// 初始化分片上传
var initRequest = new InitiateMultipartUploadRequest
{
    BucketName = "target-bucket",
    Key = "merged-final-object"
};
var initResponse = await s3Client.InitiateMultipartUploadAsync(initRequest);

// 服务端拷贝第一个分片:取source-bucket下object-a的0-5MB内容
var firstPartRequest = new UploadPartRequest
{
    BucketName = "target-bucket",
    Key = "merged-final-object",
    UploadId = initResponse.UploadId,
    PartNumber = 1,
    CopySource = "/source-bucket/object-a",
    CopySourceRange = "bytes=0-5242879"
};
var firstPartResponse = await s3Client.UploadPartAsync(firstPartRequest);

// 按相同逻辑拷贝其余源对象的内容作为后续分片,收集所有分片的ETag和PartNumber
// ...

// 完成分片上传合并
var completeRequest = new CompleteMultipartUploadRequest
{
    BucketName = "target-bucket",
    Key = "merged-final-object",
    UploadId = initResponse.UploadId,
    PartETags = collectedPartETags // 收集到的所有分片信息列表
};
await s3Client.CompleteMultipartUploadAsync(completeRequest);

注意:使用该方式时,要保证所用的S3认证身份同时拥有源对象的读权限、目标存储桶的分片上传写权限,否则会抛出权限拒绝异常。

内容的提问来源于stack exchange,提问作者No Name

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 04:03:30