当前位置: 主页 > JAVA语言

java图片上传服务器-基于FTP协议的文件传输协议设计的应用

发布时间:2023-07-10 10:04   浏览次数:次   作者:佚名

目录

一、FTP协议

FTP(文件传输协议)是一种网络协议,它可以用来在两台计算机之间传输文件。FTP协议使用TCP/IP协议,可以在不同的操作系统之间传输文件。FTP协议可以用来上传和下载文件,也可以用来查看文件列表,删除文件,重命名文件等。

FTP的特性:

1.FTP有控制连接和数据连接。控制连接标准端口为21,用于发送FTP命令信息。数据连接标准端口为20,用于上传、下载数据。

2.FTP协议和其他协议不一样的地方就是客户端访问FTP服务器端需要建立二个TCP连接,一个用来传输FTP命令,一个用来传输数据。

3.FTP有主动模式和被动模式。主动模式:服务端从20端口主动向客户端发起连接被动模式:服务端在指定范围内的某个端口被动等待客户,被动发起连接。

二、创建FTP服务器

进入Ftpconsolejava图片上传服务器,确保服务处于开启状态,记住自己电脑的主机IP(192.169.1.4)以及FTP端口号(21)。

java上传图片到服务器_java图片上传服务器_java图片上传工具类

通过Ftpconsole创建FTP服务器(选择需要操作的主目录java图片上传服务器,勾选操作对应的权限)。

java图片上传服务器_java上传图片到服务器_java图片上传工具类

三、文件列表展示

敲代码之前,将FTP协议所依赖的包commons-net-3.6.jar导入至当前项目。

下载链接:

// 连接FTP服务器,显示文件列表
public class showFileList {
	public static void main(String[] args) {
		// 创建基于FTP协议访问文件服务器的客户端对象
		FTPClient ftpClient = new FTPClient();
		try {
			// 第1步:连接FTP服务器并验证用户名密码
			ftpClient.connect("192.169.1.4",21);
			ftpClient.login("xxx", "***");
			// 第2步:
			boolean isChange = ftpClient.changeWorkingDirectory("list"); //切换目录
			if(isChange) {
				// 切换成功,显示liubin目录下的所有文件
				SimpleDateFormat fmt = new SimpleDateFormat("yyyy年MM月dd日");
				// 获取当前目录中的所有文件
				FTPFile[] ftpFileList = ftpClient.listFiles();
				for(FTPFile file : ftpFileList) {
					// 文件名称中包含中文乱码
					String fileName = file.getName();
					fileName = new String(fileName.getBytes("iso-8859-1"),"gb2312");
					System.out.println("文件名称:" + fileName);
					Date createDate = file.getTimestamp().getTime();
					System.out.println("创建时间:" + fmt.format(createDate));
					System.out.println("文件大小:" + file.getSize()+"字节");
				}
			}else {
				// 创建指定目录
				ftpClient.makeDirectory("list");
			}
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

四、文件上传(以图片为例)

// 基于FTP协议的文件上传
public class uploadFile {
	public static void main(String[] args) {
		// 创建基于FTP协议访问文件服务器的客户端对象
		FTPClient ftpClient = new FTPClient();
		try (FileInputStream in = new FileInputStream("C:\\Users\\APESOURCE\\Pictures\\view.jpg")){
			// 第1步:连接FTP服务器并验证用户名密码
			ftpClient.connect("192.169.1.4",21);
			ftpClient.login("xxx", "***");	
			// 第2步:切换至个人目录
			boolean isChange = ftpClient.changeWorkingDirectory("list");
			if(!isChange) {
				// 创建个人目录
				ftpClient.makeDirectory("list");
				// 切换
				ftpClient.changeWorkingDirectory("list");
			}
			// 第3步:文件上传
			ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); // 设置文件类型
			// 存文件至FTP服务器
			// 参数1:FTP文件的保存名称
			// 参数2:本地文件输入流
			boolean isStore = ftpClient.storeFile(System.currentTimeMillis()+".jpg", in); 
			System.out.println("文件上传成功?" + isStore);
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			// 断开连接
			try {
				ftpClient.disconnect();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

五、文件下载

//基于FTP协议的文件下载
public class downloadFile {
	public static void main(String[] args) {
		// 创建基于FTP协议访问文件服务器的客户端对象
		FTPClient ftpClient = new FTPClient();
		try (FileOutputStream out = new FileOutputStream("d:\\test\\download\\"+System.currentTimeMillis()+".jpg")){
			// 第1步:连接FTP服务器并验证用户名密码
			ftpClient.connect("192.169.1.4",21);
			ftpClient.login("xxx", "***");
			// 第2步:切换至个人目录
			boolean isChange = ftpClient.changeWorkingDirectory("list");
			// 第3步:下载指定文件
			ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); // 文件类型
			boolean isRetrieve =  ftpClient.retrieveFile("1.jpg",out);
			System.out.println("下载成功?" + isRetrieve);
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			// 断开连接
			try {
				ftpClient.disconnect();
			} catch (IOException e) {
				e.printStackTrace();
				ftpClient = null;
			}
		}
		
	}
}