最近在开发时,遇到了搭建 FTP 服务器,并利用 Java 代码上传文件的需求,现在总结一下
FTP 服务器的安装与配置
FTP 服务器在 Linux 与 Windows 平台下都有。Linux 下可以使用 vsftpd,Windows 下可以使用 Filezilla Server。目前我的开发平台是 Windows,所以使用的是 Filezilla Server
安装
打开官网,下载 exe 安装包,直接安装即可
配置
进入 Filezilla Server Interface 的界面之后,首先要让 FTP 服务器上线,点亮这个闪电图标即可
然后就是增加一个用户和给用户分配一个目录。点击这个图标,进入用户管理
点击 Add
输入用户名,并点击“OK”
设置密码
切换到 Shared folders 标签页,给新增的用户指定一个目录
并指定对文件夹的操作权限
这样就好了,点击“OK”即可
验证
打开浏览器输入 ftp://127.0.0.1,然后再输入用户名和密码即可
上传文件
引入依赖
1 | <dependency> |
然后是 Java 代码
1 | import com.ikutarian.mmall.common.Config; |
Config
类是我的配置类,配置 FTP 的连接信息,配置信息写在 properties 文件中
1 | # 图片存放的根路径 |
其中有一句代码很重要 ftpClient.enterLocalPassiveMode();
。这个涉及到了 FTP 服务器的主动模式与被动模式的知识。下面来分别说明一下
1 | By default, the FTP protocol establishes a data connection by opening a port on the client and allows the server connecting to this port. This is called local active mode, but it is usually blocked by firewall so the file transfer may not work. Fortunately, the FTP protocol has another mode, local passive mode, in which a data connection is made by opening a port on the server for the client to connect – and this is not blocked by firewall. |
翻译一下:通常 FTP 协议会在客户端上开启一个端口,让服务器连接到这个端口。这就是 local active mode
(主动模式)。但是通常由于防火墙的存在,没办法传输数据。
FPT 协议还有另外一个模式:local passive mode
(被动模式)。在服务器上开启一个端口,让客户端连接到这个端口,这样就不会被防火墙拦截了。所以,建议在传输数据之前,切换到 local passive mode
模式