您的位置:首页 > 编程语言 > PHP开发

FTP上传服务器问题--Host attempting data connect x.x.x.x is not same as server x.x.x.y

2014-06-22 00:17 591 查看
之前项目一直再用apache的FTPClient来进行文件的上传功能,可是最近FTP服务器地址改了,密码和账号也变了。使用FTP手动输入命令时,无账号密码可以登录成功,随意输入账号密码也能登录成功,好囧,这是什么情况?中途参与的项目,在FTP服务器发生变化后,修改服务器iP和端口地址后继续使用原来的FTPClient程序,发现无法上传文件到新地址上。

于是乎,开始各种调式和搜索,发现FTPClient的changeWorkingDirectory(path)和storeFile(filename,
input)执行后,changeWorkingDirectory函数返回的是flase失败,storeFile报异常Host
attempting data connect x.x.x.x is not same as server x.x.x.y。由于FTP服务器要求只能将文件上传到默认文件夹下,这块没法改动, 为了测试,直接注释掉,然后集中解决storefile()的问题:

网上 说得最多的是由于FTP有两种模式,一种是主动方式,另一种是被动方式,只要加上ftpClient.enterLocalPassiveMode()即可解决问题
,遂加之,发现不报异常,但是storefile执行后返回false,发现文件未上传到FTP服务器上。

网上还有一种说法是由于文件名是中文名称的原因,只要添加ftpClient.setControlEncoding("UTF-8"),并在创建目录或者storefile的时候将文件名转换编码方式即可,ftpClient.storeFile(new
String(fileName.getBytes("UTF-8"),"iso-8859-1"),fiStream);或ftpClient.makeDirectory(new String(pathName.getBytes("UTF-8"),"iso-8859-1"));即可解决问题,可我的而文件名不是中文啊!进一步排查手动FTP到服务器,使用passive命令,发现模式修改成功,但是进行put命令时会发现服务器拒绝响应,
排除不是FTP主动和被动工作方式的问题。

想到服务器的账号密码边了。在手动时输入账号和密码的时候直接回车既能连上,查看项目代码,发现无登陆模式的连接方法中有一个setRemoteVerificationEnabled(false),这个方法表示启用或禁用合适
,默认值是核实被启用。在代码中加入此函数,并显示设置enterLocalActiveMode()模式,运行后storefile返回TRUE,正常了。可是文件还是没有上传到FTP服务器, 将之前注释的changeWorkingDirectory(path)去掉注释,继续运行,终于成功上传
,可是changeWorkingDirectory(path)返回false ,好奇怪,为什么?咳,不管了问题解决了就好。  调式这个小玩意竟然花了我一天时间 ,好囧。菜鸟伤不起啊
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐