1. 两台linux服务器之间ftp无法上传文件
原因:ftp连接实际上包括两条链路,一条命令链路,一条数据链路,数据链路的建立有两种模式,主动模式(PORT)和被动模式(passive),实际上区别就是数据链路是由哪一方主动发起来建立。
如果采用主动模式,那么实际上需要从服务端到ftp客户端主动发一个tcp连接,如果ftp客户端是linux系统,那么需要注意防火墙的设置。
2. ftp文件上传时中文文件名乱码
原因:客户端普遍使用windows平台,那么文件在客户端是GBK编码。如果linux服务器也是GBK或gb2312编码,此时没有问题。但如果linux当前LANG是utf8,则看到的为乱码。
从文件系统存储的形式看,文件名的编码格式是与客户端上传文件时采用的编码相关的,即如果采用gbk上传文件,那么linux文件系统中文件名的编码就是gbk,反正如果采用utf8格式上传文件,那么linux文件系统中文件名的编码就是utf8,ftp服务程序并不会对上传的文件名称进行编码转换。
所谓的乱码问题,其实取决于你在什么样的语言环境中来查看该文件,如果使用正确的语言环境,其实就没所谓乱码问题了。
所以对于此问题的理解是非常简单的,客户端与服务端要想避免乱码问题,那么必须清楚自己与对方的语言环境,如果语言环境不一致,那么或者客户端使用服务端所使用的字符集上传文件(进行编码转换,常用的ftp客户端工具都有相关的选项,比如winscp可以设定文件名使用utf编码进行上传),或者服务端使用的查看程序进行相应的编码转换之后再处理(比如java程序先进行编码转换后,再从文件系统中进行读取)。