文件传输协议:FTP
定义:ftp是File Transfer Protocol(文件传输协议),顾名思义,就是专门用来传输文件的协议。FTP用来在两台计算机之间传输文件,是Internet中应用非常广泛的服务之一,简单来说,支持FTP协议的服务器就是FTP服务器。
FTP是一种基于TCP的协议,具有跨平台的特性,支持Windox,Linux,Unix等操作系统。采用客户/服务器模式,通过FTP服务器可以快速的下载,上传文件。
同时它也是一个应用程序,通过FTP客户端与他人的服务器相连,可以访问服务器上的文件或信息。
一,搭建FTP客户端的过程
1.首先,下载EasyFtp Server ,并设置参数,如下所示:
再进入账号管理,设置FTP服务器允许下载/上传文件的目录,如下所示:
浏览器搜索:ip:8080,可显示出你设置的目录文件或者图片,点击即可下载。
2,创建FTP客户端,(以下是用我自己电脑来模拟客户端和服务器)。
上传至FTP服务器
第一步:首先先导入jar包
第二步:实现思路
步骤:
1,创建对象:通过FTPClient创建FTP协议的客户端对象:FTPClient ftpClient = new FTPClient();
2,连接:通过ftpClient.connect(“ip地址”,21); 连接TCP服务器(上传本地图片)
3,登录:ftpClient.login();
4,操作(上传):
通过FileInputStream创建文件输入流,用于读取本地图片
存储前设置文件类型:ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
存储文件:
ftpClient.storeFile();
参数1:ftp服务器的存储位置(目录+文件名)
参数2:本地的文件输入流
最后一步:关闭连接
【实现代码】
package com.my.ftp;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.commons.net.ftp.FTPClient;
public class Upload {
public static void main(String[] args) {
// FTP协议的客户端
FTPClient ftpClient = new FTPClient();
// 创建文件输入流,用于读取本地图片
try (FileInputStream localIn = new FileInputStream("E:\\apesource\\download\\jay.jpg")){
// Step1: 连接本地图片
ftpClient.connect("192.168.254.180",21);
// Step2:登录
ftpClient.login("root", "root");
// Step3:操作
boolean isChange = ftpClient.changeWorkingDirectory("aa");// 切换工作目录
System.out.println("切换工作目录:" + isChange);
if(!isChange) {
ftpClient.makeDirectory("aa");
isChange = ftpClient.changeWorkingDirectory("aa");
}
System.out.println("切换工作目录:" + isChange);
// Step4:存储文件(将本地图片上传至FTP服务器)
ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE); // 存储前设置文件类型
// 参数1:ftp服务器的存储位置(目录+文件名)
// 参数2:本地的文件输入流
boolean send = ftpClient.storeFile("jay_new.jpg", localIn);
System.out.println(send);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
// 关闭连接
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
【运行结果】
创建了一个aa文件夹,打开可看到刚才上传的图片jay_new.jpg
刚才代码中ftpClient.connect(“192.168.254.180”,21);
写的是我本机IP,所以,在上传到FTP服务器上的同时
,也可在本地内存上查看到指定目录下上传的图片:
**
从FTP服务器中下载
**
【实现思路】
1.创建一个FTP客户端的对象,通过对象的connect()方法,login()方法来连接指定的FTP服务器。
2. 创建FileOutputStream来设置文件下载的指定位置
3.在下载前用客户端对象的setFileType()方法来设置下载的文件类型,这里我们使用BINARY_FILE_TYPE来进行图片的下载。
4.retrieveFile()传入要下载的文件名和输出流,进行图片的下载;其中此方法返回一个boolean值,可以输出它的返回值来判断它是否下载成功。
【实现代码】
package com.my.ftp;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.SocketException;
import org.apache.commons.net.ftp.FTPClient;
// 下载FTP服务器中的文件
public class DownLoadFtp {
public static void main(String[] args) {
String downloadFileName = "yibo.jpg";
FTPClient ftpClient = new FTPClient();
try (FileOutputStream out = new FileOutputStream("E:\\apesource\\ftp\\" + downloadFileName)){
ftpClient.connect("192.168.254.180", 21);
ftpClient.login("root", "root");
ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
boolean isRetirve = ftpClient.retrieveFile(downloadFileName, out);
System.out.println("下载成功?" + isRetirve);
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
【运行结果】:
在输出流中指定的位置我们可以看到刚才在FTP服务器上下载的图片: