阿里云上传失败的情况很杂。进度条走到一半断掉,报错看不懂,或者网络明明正常却传不上去,人很容易急。这类问题大多有迹可循,按“先分清场景,再看报错,最后逐项排查”的顺序来查,通常不会绕太远。

先确认你在传到哪里
“阿里云上传”至少包含三种情况:
- 在控制台网页上传文件到 OSS 的 Bucket;
- 用命令行工具、SDK 或脚本调用接口上传到 OSS;
- 登录 ECS 云服务器,通过 FTP、SFTP、scp 或远程桌面上传文件。
三种情况的故障点差别很大。控制台都打不开,多半是浏览器或本地网络的问题;OSS 报 403,可以先查权限;ECS 上传卡住,就要看安全组和服务器磁盘。场景没分清,后面很容易查错方向。
一个运营同学的例子
某电商团队的运营小王,每天要把几十张商品图上传到 OSS。某天早上,她在控制台点上传,进度条走到一半就失败,重试几次还是一样。她先怀疑网络,换了个网络依旧不行。
技术同事看了报错,是 AccessDenied。检查后发现,团队前一天调整过子账号权限,她所在的 RAM 用户被移除了这个 Bucket 的写入权限。补回权限后,上传立刻恢复。
同样是“上传不了”,根源可能完全不在网络。先看报错码,比凭感觉猜要快。
OSS 上传失败的常见原因
权限不足(403 AccessDenied)
这是最常见的一类。RAM 用户缺少 oss:PutObject 权限,或 Bucket 的读写权限、ACL 设置和预期不一致,都会被拒绝。先到 RAM 控制台查看该用户挂载的策略,再到 Bucket 的权限设置里核对一遍,通常能找到问题。
AccessKey 错误或已失效
使用 SDK 或 ossutil 时,如果 AccessKey ID 或 Secret 填错,或者密钥已被禁用、删除,会直接返回鉴权失败。先在 RAM 控制台确认密钥状态。另外,密钥不要硬编码进代码,可以改用环境变量,或者使用 STS 临时凭证。
Endpoint 与地域不匹配
OSS 的访问域名和 Bucket 所在地域直接相关。比如 Bucket 在华东1(杭州),却用了华北2(北京)的 Endpoint,常见表现是请求超时,或返回 NoSuchBucket。先确认 Bucket 的地域,再换成对应的 Endpoint。
文件过大或分片失败
控制台普通上传对单文件大小有限制,超过限制要改用分片上传。分片中任何一片失败,整个任务也会失败。大文件建议用 ossutil 或 SDK 的分片上传,并开启断点续传,失败后从断点接着传,不必整体重来。
跨域(CORS)没配置
前端页面直接用浏览器向 OSS 上传时,需要在 Bucket 上配置跨域规则,放行对应的来源域名、请求方法和请求头。没配的话,控制台会出现 CORS 相关报错。预检请求(OPTIONS)不通过时,真正的上传请求不会发出,所以看到的往往是“请求被拦了”,而不是服务端返回的错误码。
签名过期或服务器时间不准
使用预签名 URL 时,签名过期或服务器本地时间偏差较大,校验都会失败。检查签名的有效期,并确认服务器已开启 NTP 时间同步。时间问题不容易察觉,一旦遇上,排查起来很耗时间。
ECS 服务器上传失败怎么查
通过 FTP、SFTP 或 scp 上传到 ECS,可以按下面几处逐个确认:
- 安全组是否放行了端口。SFTP 默认用 22;FTP 要放行 21,以及被动模式使用的端口范围;
- 磁盘空间是否够用,用 df -h 看剩余容量;
- 目标目录是否有写入权限,用 ls -l 查看属主和权限位;
- 对应服务是否在运行,比如用 systemctl status sshd 或 vsftpd 查看状态。
一位做独立开发的朋友遇到过这样的情况:本地用 scp 上传几百兆的安装包,传到一半断开。登录服务器一看,磁盘只剩几十兆。清理日志、扩容之后,上传顺利完成。遇到中断,先看磁盘,成本最低。
照着做的排查顺序
- 完整记录报错信息,包括错误码、RequestId 和发生时间;
- 确认目标是 OSS 还是 ECS,核对 Bucket 地域和 Endpoint;
- 检查 AccessKey 是否有效,RAM 策略是否包含所需操作;
- 用 ping 或 telnet 测试目标域名和端口是否连通;
- 检查文件本身:大小是否超限,文件名是否有特殊字符,文件是否正被其他程序占用;
- 仍然无法解决时,带上 RequestId、日志和配置信息提交阿里云工单,定位会快不少。
提前设置,能少踩不少坑
上传失败多数可以提前规避。团队里尽量用 RAM 角色,少用长期密钥;上传脚本加上重试和断点续传;关键 Bucket 开启操作日志和监控告警。出了问题时,有日志就能快速定位,不必临时翻找。