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

MacOS M2环境下FastAPI+Boto3上传S3/MinIO遇100 Continue阻塞问题

解决方案

1. 禁用Expect: 100-continue请求头

MacOS M2环境下,Boto3默认触发的Expect: 100-continue机制可能和S3/MinIO的响应逻辑不兼容,导致请求卡住。直接关闭该机制即可解决:

代码层面修改

初始化Boto3客户端时添加对应配置:

import boto3
from botocore.config import Config

s3_config = Config(
    expect_100_continue=False,
    connect_timeout=10,
    read_timeout=30,
    retries={'max_attempts': 3}
)

s3_client = boto3.client(
    's3',
    endpoint_url='http://你的MinIO端点' if 使用MinIO else None,
    aws_access_key_id='你的密钥ID',
    aws_secret_access_key='你的密钥',
    config=s3_config
)

AWS CLI层面修改

编辑~/.aws/config文件,添加:

[default]
s3 =
    expect_100_continue = false

2. 强制使用IPv4连接

MacOS M2默认优先IPv6,若你的存储服务未配置IPv6支持,会导致连接异常。强制切换到IPv4:

代码层面

在Config中添加IPv4强制配置:

s3_config = Config(
    # 保留其他配置...
    use_dualstack_endpoint=False,
    addressing_style='path'
)

或运行脚本前设置环境变量:

export AWS_FORCE_IPV4=true

AWS CLI层面

在~/.aws/config中添加:

[default]
s3 =
    addressing_style = path

执行CLI命令时附加环境变量:

AWS_FORCE_IPV4=true aws s3 cp 本地文件路径 s3://你的存储桶/目标路径

3. 调整超时参数

适当延长超时阈值,避免网络延迟触发ReadTimeoutError:

s3_config = Config(
    connect_timeout=15,
    read_timeout=60,
    retries={'max_attempts': 5, 'mode': 'standard'}
)

4. MinIO服务端配置调整(仅针对MinIO)

若使用MinIO,检查并延长API请求超时时间,启动服务时添加参数:

minio server ./数据目录 --api-request-timeout 120s

验证测试

修改配置后,运行简单上传测试确认问题解决:

import boto3
from botocore.config import Config

test_config = Config(expect_100_continue=False, use_dualstack_endpoint=False)
client = boto3.client('s3', config=test_config, ...)
client.put_object(Bucket='测试桶', Key='test.txt', Body=b'测试内容')
print("上传完成,未出现卡顿")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 05:52:02