问题描述
使用阿里云对象存储OSS时,ossftp作为一个特殊的FTP server,可以将对文件、文件夹的操作映射为对OSS的操作,使您可以基于FTP协议来管理存储在OSS上的文件。本文介绍了运用ossftp工具无法通过FTP上传文件到OSS的问题原因及解决方案。
问题原因
出现文件无法上传的原因如下:
并发量比较高:并发量比较高的情况下,会出现ossftp上传失败的现象。
存在跨境访问的问题:在跨境请求的场景下,由于跨境链路的限制,出现访问慢或无法访问等普遍现象。
Bucket和Endpoint不匹配:OSS会为每一个存储空间(Bucket)分配默认的访问域名(Endpoint),Bucket和Endpoint不匹配就会导致上传错误。
Bucket权限不正确:当Bucket读写权限设置为公共读写时,任何人(包括匿名访问者)都可以对该Bucket内的文件进行读写操作。没有正确的配置Bucket访问权限,会导致文件上传失败。
运行FTP Server的机器由于端口限制导致数据传输不成功:由于FTP协议的控制端口和数据端口不同,当FTP Server工作在被动模式下,每当需要传输数据时,FTP Server会打开1个随机端口,等待客户端来连接。所以当FTP Server所在机器有端口限制时,可能会导致数据无法正常传输。
客户端和FTP Server之间的连接经常断开:FTP客户端一般都有超时设置,若超时连接就会断开。
解决方案
运用ossftp工具上传文件失败时,可以参见以下步骤进行排查:
首先请检查您的并发量是否过高,如果存在并发高的情况,建议在生产环境中使用ossutil、ossbrowser、SDK等工具管理您的OSS。
说明ossftp主要提供给个人测试时使用,不建议在生产和高并发的环境中使用。
请确认上传的客户端设备与OSS所属的区域是否涉及跨境传输。若存在跨境请求,可以开通OSS传输加速,对整体链路做一个优化,优化完成后重新上传文件看是否能上传成功。如何开通OSS传输加速,请参见开启传输加速。
检查您的Bucket Endpoint配置是否匹配,首先确认您的Bucket名称是否正确,相关地域的Bucket只能通过本地域的访问域名来进行访问。例如华东1(杭州)地域的访问域名如下:
说明内网、外网访问Endpoint可直接使用,无需额外配置,而传输加速Endpoint使用前需先开启Bucket的传输加速功能 。
外网Endpoint:oss-cn-hangzhou.aliyuncs.com
内网Endpoint:oss-cn-hangzhou-internal.aliyuncs.com
传输加速全球加速Endpoint:oss-accelerate.aliyuncs.com
传输加速非中国内地加速Endpoint:oss-accelerate-overseas.aliyuncs.com
检查当前用户是否有Bucket读写权限,如果RAM子用户没有相应的权限,请参见如何对OSS进行访问权限控制授予子用户权限。
请检查ossftp所在机器是否存在端口限制,若存在则打开相应的端口。
重要所有修改都需要重启才能生效。
若ossftp所在的机器是本地机器,直接启动ossftp目录下的ftpserver.py,在运行ftpserver.py时通过指定
--passive_ports_start
和--passive_ports_end
参数来设置本地端口的起止范围,然后将该范围的端口都打开。若ossftp所在的机器是ECS云服务器,请至ECS管理控制台修改安全组规则,详情请参见修改安全组规则。
检查您的FTP客户端是否有超时设置,若存在超时设置则设置不超时。以FileZilla工具为例,在设置>连接里,可以将超时设置为0。
若执行完上面的操作仍没有解决问题,请参见ossftp常见问题进行排查。