FTP协议的理解
ftp协议:就是文件传输协议,是一种基于TCP/IP的应用层协议。包含FTP服务器和FTP客户端两部分。FTP客户端需通过‘FTP协议’对服务器进行访问,其中FTP服务器用来存储文件,用于在Internet上的控制文件的双向传输。
FTP的工作模式
在进行ftp操作时,首先需要保证远程服务器端的通信状态,在远程服务器中执行FTP服务器应用程序,使服务器处于等待被连接的状态;这样,就可以通过自己的FTP客户端和FTP服务器进行连接通信。
FTP的服务器
FTP服务器使用两个端口,分别为控制端口(命令端口)和数据端口。控制端口号一般为21,数据端口一般为20。控制socket用来传输命令,数据socket用来传输数据。每一个FTP命令发送后,FTP服务器就会返回一个字符串,其中包含一个响应码和一些说明信息,其中响应码主要用于判断命令是否被成功执行了。
服务器端需创建一个用户,设置用户名并设置指定服务器用户对应的本地文件目录,以及设置客户端对自己的访问权限。
上传文件至ftp服务器
1、首先创建FTP协议的客户端对象
FTPClient ftpClient = new FTPClient();
2、连接FTP服务器
// 传入客户端自己的IP地址以及服务器端口号
ftpClient.connect("192.168.137.1", 21);
3、登录,通过传入服务器的用户名和密码
ftpClient.login("root", "root");
4、将本地文件上传
优化步骤:为了便于上传,我们可以做一个切换目录的操作,可以切换至我们指定的目录或创建的新目录下
if (!ftpClient.changeWorkingDirectory("upload")) {
//如果目录不存在切换不成功 创建新目录
ftpClient.makeDirectory("upload");
//切换到新目录
ftpClient.changeWorkingDirectory("upload");
}
切换完目录后,我们需要指定上传文件的存储类型然后再上传。
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); //存储前设置文件类型
// 要上传的文件
File tempExcelFile = new File("本地文件路径");
// 通过输入流包装
FileInputStream in = new FileInputStream(tempExcelFile)
// 使用storeFIle方法上传,存储至ftp服务器
ftpClient.storeFile(tempExcelFile.getName(), in);
//最后记得要手动断开连接
文件上传至ftp的完整过程
//创建ftp客户端对象
FTPClient ftpClient=new FTPClient();
//创建输入流,读取本地文件
try(InputStream localIn=new FileInputStream("c://text//Du.jpg")) {
//连接服务器
ftpClient.connect("192.168.254.185",21);
ftpClient.login("root", "root");//登录
//切换至指定目录
boolean isChange=ftpClient.changeWorkingDirectory("du");
if(!isChange) {
//判断是否切换成功
ftpClient.makeDirectory