前提:使用客户端访软件FTP服务器对文件进行操作是OK的。
问题:在代码中执行FTPClient的changeWorkingDirectory(pathname)方法失败,debug代码的时候报550 Fial to change directoty。
changeWorkingDirectory方法执行返回falsehou 文件依然上传成功了,只不过上传的目录是vsftpd.conf中local_root指定的目录,而不是我们代码中指定的目录。
举个栗子:
我的代码: changeWorkingDirectory("/ftpfile/img") //返回false
nginx配置项:

vsftpd配置项:

So,这时候文件会上传到/ftpfile,然而我们在浏览器输入"nginx域名+文件名"想要访问上传的文件是访问不到的,因为/ftpfile/img下没有这个文件
解决方法:想要将文件存到我们指定的目录,就需要在配置文件中将chroot_local_user这一项设为YES,设置如下:
配置项说明:
在默认配置下,本地用户登入FTP后可以使用cd命令切换到其他目录,这样会对系统带来安全隐患。可以通过以下三条配置文件来控制用户切换目录。
- chroot_list_enable=YES(NO)
设置是否启用chroot_list_file配置项指定的用户列表文件。默认值为NO。 - chroot_list_file=/etc/vsftpd.chroot_list
用于指定用户列表文件,该文件用于控制哪些用户可以切换到用户家目录的上级目录。 - chroot_local_user=YES(NO)
用于指定用户列表文件中的用户是否允许切换到上级目录。默认值为NO。
结论
So,想要访问成功:
- 在代码中不调用changeWorkingDirectory方法,就在vsftpd中设置存储文件的目录
- 在代码中调用changeWorkingDirectory方法,就要修改vsftpd的配置让登陆的用户能够有切换目录的权限。
FTPClient上传文件550错误解决办法
在使用FTPClient进行文件上传时遇到550 Fial to change directory问题,即使changeWorkingDirectory方法返回false,文件仍能上传,但路径不符预期。解决方法包括在vsftpd配置中设置chroot_local_user为YES,或不调用changeWorkingDirectory方法,直接在服务器配置指定存储路径。
1235

被折叠的 条评论
为什么被折叠?



