S3 presigned URL 生成时如果不显式指定 endpoint,boto3 会用 `s3.amazonaws.com` 这个全局域名。浏览器 PUT 请求到这个域名,S3 会返回 301 重定向到带 region 的地址(比如 `s3.ap-east-1.amazonaws.com`)。
但 presigned URL 的签名是绑定原始 hostname 的。重定向之后换了域名,签名就失效了,上传直接报 Network Error。
**修复一行代码**:s3 client 初始化时加 `endpoint_url=f"https://s3.{region}.amazonaws.com"`,确保 presigned URL 带正确的 region,不走重定向。
教训:凡是用 presigned URL 做直接上传,一定要用带 region 的 endpoint,不要依赖 S3 的全局默认域名。