本文记录 web项目中flex读取ftp上的图片解决方法。

在浏览器环境下,flex解析FTP协议是交给浏览器完成的。(这一点是走了不少弯路才发现的,不过在绕弯的过程中也有一些收获)故在web应用中,flex加载ftp图片只要路径正确是能够正常显示的。

在flash player环境下,则会将ftp协议解析为http,导致读取不到正确的文件。所以只能通过socket来读取ftp文件。

在不需要任何ftp客户端工具的前提下,可以通过telnet命令来完成FTP的所有操作。

ftp的常见路径格式为两种

带用户认证:ftp://user:pass@host:port/

匿名认证:ftp://host:port/

telnet命令

telnet 127.0.0.1 21
220 Microsoft FTP Service
user admin
331 Password required for admin.
pass admin
230 User logged in.
pwd
257 "/" is current directory.
cwd samples
250 cwd command successful.
type i
200 Type set to I.
pasv
227 Entering Passive Mode (127,0,0,1,246,233)
retr /samples/sample_p_w_picpath_01.jpg

此处注意,host应尽量使用IP,不要使用localhost,如apache ftpserver就会在下载文件时报错

当被动模式启动后,发送新的socket连接到246*256+233=63209端口,ftp服务器就会主动的推送文件到客户端了。

只要按照上诉思路完成flash ftp socket连接实现就不成问题了(已经过代码验证可行)

在浏览器环境下,进行socket连接还可能出现安全沙箱问题。此时需要在ftp服务器上运行flash-policy-server,这个工具是java编写在网上很多下载点。