FTP协议(File Transfer Protocol)是一种用于在计算机网络上进行文件传输的标准网络协议。它允许用户在客户端和服务器之间上传、下载和管理文件。FTP协议支持匿名访问和身份验证访问,可以通过用户名和密码进行身份验证。
1.使用Ftpconsole软件进行上传和下载
设置用户名和密码,并将想要上传的文件放入主目录,并设置权限
2.在网页中输入主机ip:web服务端口号后输入用户名和密码,则可以进入文件列表展示,并根据权限对文件进行操作
同样的,也可以根据使用编码的方法实现对文件的上传以及下载
1.连接到FTP服务器,验证密码,切换到指定文件夹,列出文件信息,并打印输出文件的名称、创建时间和大小。如果文件夹不存在,则会创建一个新的文件夹。
- 建立FTP连接:使用FTP函数,连接到FTP服务器。
- 登录FTP服务器:如果需要身份验证,使用用户名和密码登录FTP服务器。
- 获取文件列表:使用LIST命令,获取FTP服务器上的文件列表。
- 解析和展示文件列表:根据服务器返回的文件列表数据,解析并展示文件名、大小、修改日期等信息。
public class Demo1 {
public static void main(String[] args) {
//创建基于ftp协议访问问文件服务器的客户端对象
FTPClient ftpClient = new FTPClient();
try(FileInputStream in = new FileInputStream("E:\\猿究院\\20230708\\1.jpg")) {
//连接ftp协议并验证密码
ftpClient.connect("192.168.254.107", 21);
ftpClient.login("c", "123");
//切换个人文件夹
boolean isChange = ftpClient.changeWorkingDirectory("cccc");
//切换成功,"dd"下的所有文件
if(!isChange) {
//创建个人文件夹
ftpClient.makeDirectory("cccc");
//切换
ftpClient.changeWorkingDirectory("cccc");
//设置日期格式
SimpleDateFormat fmt = new SimpleDateFormat("yyyy年MM月dd日");
//获取当前目录中的所有文件
FTPFile[] ftpFileList = ftpClient.listFiles();
for(FTPFile ftpFile : ftpFileList) {
String name = ftpFile.getName();
name = new String(name.getBytes("iso-8859-1"),"gb2312");
System.out.println("文件名称:" + name);
Date createTime = ftpFile.getTimestamp().getTime();
System.out.println("创建时间:" + fmt.format(createTime));
System.out.println("文件大小:" + ftpFile.getSize()+"字节");
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.通过编码实现文件的上传
- 建立FTP连接
- 登录FTP服务器
- 打开本地文件:使用流文件操作,打开本地待上传的文件。
- 创建远程文件:使用storeFile方法,创建远程服务器上的目标文件。
- 上传文件内容:将设置的ftp的样式以及本地文件输入流作为参数加载,完成文件上传。
public class Demo1 {
public static void main(String[] args) {
//创建基于ftp协议访问问文件服务器的客户端对象
FTPClient ftpClient = new FTPClient();
try(FileInputStream in = new FileInputStream("E:\\猿究院\\20230708\\1.jpg")) {
//连接ftp协议并验证密码
ftpClient.connect("192.168.254.107", 21);
ftpClient.login("c", "123");
//切换个人文件夹
boolean isChange = ftpClient.changeWorkingDirectory("cccc");
//切换成功,"dd"下的所有文件
if(!isChange) {
//创建个人文件夹
ftpClient.makeDirectory("cccc");
//切换
ftpClient.changeWorkingDirectory("cccc");
}
System.out.println(ftpClient.printWorkingDirectory());
//第三步:w文件上传
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
//存文件至FTP服务器
//参数一:FTp文件的样式
//参数二:本地文件输入流
boolean isStore = ftpClient.storeFile(System.currentTimeMillis()+".jpg", in);
System.out.println(isStore);
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.通过编码实现文件的下载
- 建立FTP连接
- 登录FTP服务器
- 打开本地文件:使用FileOutputStream,创建本地存储下载文件的目标文件。
- 下载文件内容:使用retrieveFile方法,从FTP服务器下载文件内容,并将其逐块地写入本地文件,直到文件传输完成。
//文件下载
public class Demo2 {
public static void main(String[] args) {
//创建基于ftp协议访问问文件服务器的客户端对象
FTPClient ftpClient = new FTPClient();
try(FileOutputStream out =new FileOutputStream("E:\\猿究院\\20230708\\di\\"+System.currentTimeMillis()+".jpg")) {
//连接ftp协议并输入密码
ftpClient.connect("192.168.254.107", 21);
ftpClient.login("c", "123");
//切换个人文件夹
boolean isChange = ftpClient.changeWorkingDirectory("cccc");
//指定下载文件
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//文件类型
boolean isRetrieve = ftpClient.retrieveFile("1.jpg", out);
System.out.println("下载成功?"+isRetrieve);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}