ossclient 初始化时endpoint必须与bucket所在region严格匹配,否则报invalidendpoint或连接超时;需安装对应nuget包,accesskey应从配置中心或环境变量读取,禁止硬编码。

用 OssClient 上传文件到阿里云 OSS,别漏掉 Region 和 Endpoint 的匹配关系
阿里云 OSS 的 OssClient 初始化时,Endpoint 必须和 bucket 所在地域(Region)严格对应,否则会报 InvalidEndpoint 或直接连接超时。比如 bucket 在杭州,就得用 https://oss-cn-hangzhou.aliyuncs.com,不能写成 https://oss-cn-beijing.aliyuncs.com。
上传前确保已安装 NuGet 包:Aliyun.OSS.SDK.NetStandard(.NET Core/.NET 5+ 推荐)或 Aliyun.OSS.SDK(旧版 .NET Framework)。
-
AccessKeyId和AccessKeySecret建议从配置中心或环境变量读取,不要硬编码 - 小文件(PutObject;大文件建议走分片上传
InitiateMultipartUpload+UploadPart - 对象 Key(即 CDN 路径)里避免中文和空格,推荐用
Guid.NewGuid().ToString("N") + ".jpg"生成唯一名
用 CosXmlServer 推送到腾讯云 COS,注意 AppId 是路径一部分
腾讯云 COS 的 SDK(CosXml)初始化时,AppId 不是可选参数——它会拼进 endpoint 里。例如 bucket 名为 my-bucket-1250000000,其中 1250000000 就是 AppId,最终 endpoint 是 https://my-bucket-1250000000.cos.ap-guangzhou.myqcloud.com。漏掉或填错 AppId 会导致 403 或 404。
需安装 NuGet 包:CosXml,并启用 HTTPS(默认强制)。
- 上传前调用
cosXmlConfig.SetSignExpiredTime(3600)控制临时签名有效期,避免上传中途过期 - 如需直传到 CDN 加速域名(如
https://cdn.example.com/xxx.jpg),实际仍是传到 COS,再通过 COS 控制台绑定自定义域名 + 开启 CDN 加速,SDK 层不感知 CDN - 本地文件较大时,用
PutObjectRequest的IsUseStream设为true,避免内存一次性加载整个文件
上传后如何让 CDN 生效?别只等缓存自动刷新
OSS 和 COS 本身不是 CDN,它们只是源站。你上传完文件,CDN 节点仍可能返回旧内容或 404,因为边缘节点还没拉取最新版本。
- 阿里云 OSS:调用
RefreshObjectCaches接口(需开通 CDN 服务),或在 OSS 控制台手动提交刷新,支持目录刷新(如/upload/2024/) - 腾讯云 COS:调用
PurgeCache(CDN 控制台或 API),注意免费额度有限(每月 1000 条),超量要付费 - 更轻量的做法是上传时加时间戳或版本号到文件名(如
avatar_v2_1717023456.jpg),彻底绕过缓存问题
常见上传失败原因:权限、网络、路径三连坑
报错 AccessDenied 大概率是 STS 临时 token 权限不足,或 RAM 子账号没被授予 oss:PutObject / cos:GetObject 等最小必要权限;报错 Connection refused 或 Timeout 则常因内网环境未配置代理或 VPC 绑定错误;而 NotFound 很可能是 bucket 名写错、region 选错,或 key 路径开头多了斜杠(如 /images/a.jpg 应写成 images/a.jpg)。
- OSS 的 bucket 名全局唯一,COS 的 bucket 名需带
-appid后缀,二者命名规则不同,不能混用 - .NET 6+ 默认禁用不安全的 TLS 1.0/1.1,若遇到 SSL handshake failed,确认服务器支持 TLS 1.2+(现代 OSS/COS 都支持)
- 上传流时务必确保
Stream.Position == 0,否则可能上传空内容而不报错










