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

.NET 6中TransferUtility上传S3报错:aws-chunked不支持

AWS S3高级API上传报错:aws-chunked编码不支持的解决方法

问题描述

使用AWS S3 .NET SDK(版本3.7.101.59,目标框架net6.0)的高级API进行文件上传时,抛出异常:

Amazon.S3.AmazonS3Exception: Transfering payloads in multiple chunks using aws-chunked is not supported.

客户端配置代码如下(仅手动修改了客户端创建部分,其余与官方示例一致):

var configuration = new AmazonS3Config
{
   ForcePathStyle = true,
   ServiceURL = "URL",
};
var credentials = new BasicAWSCredentials("ACCESS_KEY", "SECRET");
IAmazonS3 client = new AmazonS3Client(credentials, configuration);

但使用PutObjectRequest并设置UseChunkEncoding = false时,上传可以正常运行:

fs.Seek(0, SeekOrigin.Begin);
 var uploadRequest = new PutObjectRequest
 {
    InputStream = fs,
    Key = outputFileName,
    BucketName = bucketName,
    UseChunkEncoding = false,
 };
 await _client.PutObjectAsync(uploadRequest);

原因分析

AWS S3的高级多部分上传API(比如TransferUtility)默认会启用aws-chunked分块编码,这是AWS特有的分块传输方式。如果对接的是兼容S3的第三方存储服务(如MinIO、阿里云OSS等),这类服务可能不支持该编码格式,从而触发报错。而PutObjectRequest是单部分上传接口,手动关闭UseChunkEncoding后使用了标准HTTP分块,因此能正常工作。

解决方案

方案1:全局禁用aws-chunked编码

在创建AmazonS3Config时直接添加UseChunkEncoding = false,全局生效:

var configuration = new AmazonS3Config
{
   ForcePathStyle = true,
   ServiceURL = "URL",
   UseChunkEncoding = false, // 全局禁用aws-chunked编码
};
var credentials = new BasicAWSCredentials("ACCESS_KEY", "SECRET");
IAmazonS3 client = new AmazonS3Client(credentials, configuration);

方案2:针对TransferUtility单独配置

如果不想全局修改,可在初始化TransferUtility时通过TransferUtilityConfig关闭分块编码:

var transferConfig = new TransferUtilityConfig
{
    UseChunkEncoding = false
};
var transferUtility = new TransferUtility(client, transferConfig);
// 后续使用transferUtility执行上传操作

验证

修改配置后,使用高级API上传文件即可避免aws-chunked相关异常,与单部分上传表现一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 07:41:24