使用ossftp工具上传文件到OSS失败的解决方法

问题描述

使用阿里云对象存储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工具上传文件失败时,可以参见以下步骤进行排查:

  1. 首先请检查您的并发量是否过高,如果存在并发高的情况,建议在生产环境中使用ossutilossbrowserSDK等工具管理您的OSS。

    说明

    ossftp主要提供给个人测试时使用,不建议在生产和高并发的环境中使用。

  2. 请确认上传的客户端设备与OSS所属的区域是否涉及跨境传输。若存在跨境请求,可以开通OSS传输加速,对整体链路做一个优化,优化完成后重新上传文件看是否能上传成功。如何开通OSS传输加速,请参见开启传输加速

  3. 检查您的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

  4. 检查当前用户是否有Bucket读写权限,如果RAM子用户没有相应的权限,请参见如何对OSS进行访问权限控制授予子用户权限。

  5. 请检查ossftp所在机器是否存在端口限制,若存在则打开相应的端口。

    重要

    所有修改都需要重启才能生效。

    • 若ossftp所在的机器是本地机器,直接启动ossftp目录下的ftpserver.py,在运行ftpserver.py时通过指定--passive_ports_start--passive_ports_end参数来设置本地端口的起止范围,然后将该范围的端口都打开。

    • 若ossftp所在的机器是ECS云服务器,请至ECS管理控制台修改安全组规则,详情请参见修改安全组规则

  6. 检查您的FTP客户端是否有超时设置,若存在超时设置则设置不超时。以FileZilla工具为例,在设置>连接里,可以将超时设置为0。

  7. 若执行完上面的操作仍没有解决问题,请参见ossftp常见问题进行排查。