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)。
通过Ftpconsole创建FTP服务器(选择需要操作的主目录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;
}
}
}
}