概述
本文将详解介绍如何通过 docker 搭建 vsftpd 服务,并在 java 中通过 ftp api 上传,下载文件等操作。
主要包括以下两个部分:
- 通过 通过 docker 安装 vsftpd
- 在 java 中通过 FTPClient 访问 vsftpd 并对 FTP 文件进行操作
通过 docker 安装 vsftpd
这里介绍在 windows 平台下根据 vsftpd 镜像搭建 vsftpd 服务。
创建数据和日志目录
1 | D:\\docker\\vsftpd\\data |
分别用于存储数据文件和日志
拉取镜像
1 | docker pull fauria/vsftpd:latest |
启动镜像
1 | docker run -d ^ |
- 其中:
^
用于 windows 下的命令换行
参数说明
-d
: 后台运行--restart=always
: 容器随着 docker 重启会自动启动--name vsftpd
:容器名称-v D:\\docker\\vsftpd\data:/home/vsftpd
: 数据挂载目录:宿主机目录:容器目录
-v D:\\docker\\vsftpd\\log:/var/log/vsftpd
: 日志挂载目录-p 20:20
: 用于进行数据传输,宿主机端口:容器端口
-p 60021:21
: 用于接受客户端发出的相关 FTP 命令与参数,宿主机端口:容器端口
-p 21100-21110:21100-21110
: 在 被动模式 下的开放端口范围-e PASV_ADDRESS=192.168.0.103
: 在 被动模式 下的主机的地址-e PASV_MIN_PORT=21100
: 在 被动模式 下开放的最小端口-e PASV_MAX_PORT=21110
: 在 被动模式 下开放的最大端口-e FTP_USER=root
: ftp 用户名-e FTP_PASS=root
: ftp 密码fauria/vsftpd:latest
: 使用的镜像和版本号
FTP 可通过主动模式和被动模式与客户端机器进行连接并传输数据。由于大多数客户端机器的防火墙设置及无法获取真实 IP 等原因,这里选择被动模式搭建 FTP 服务。
在 java 中通过 FTPClient 访问 vsftpd 并对 FTP 文件进行操作
这里以上面搭建的 vsftpd 为 ftp 服务器端,通过 FTPClient 访问 vsftpd 服务,实现上传和下载文件等操作,主要包括以下内容
- 获取 FTPClient 对象
- 关闭 FTPClient 对象
- 从 FTPServer 下载指定文件
- 将本地文件上传到 FTPServer
- 在 FTPServer 上 复制 文件
- 在 FTPServer 上 剪切(或者移动) 文件
- 在 FTPServer 上 删除指定文件夹下文件及其子文件
- 在 FTPServer 上 遍历解析文件夹下所有文件
maven 依赖
- commons-net 包含了 FTPClient api 的核心操作
- xutils 包含了 FtpUtils 工具类,简化了对 ftp api 的操作
1 | <dependency> |
工具类封装如下
- 其中
1 | package com.ckjava.xutils; |
测试代码
1 | package com.ckjava.xutils.test; |