当前位置:网站首页>基于FTP协议实现文件上传与下载
基于FTP协议实现文件上传与下载
2022-08-10 00:48:00 【x.y.r】
目录
一、FTP简介
FTP(File Transfer Protocol)即文件传输协议,是一种基于TCP的协议,采用客户/服务器模式。支持FTP协议的服务器就是FTP服务器。
与大多数 Internet服务一样,FTP也是一个 客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。比如说,用户发出一条命令,要求服务器向用户传送某一个文件的一份拷贝,服务器会响应这条命令,将指定文件送至用户的机器上。客户机程序代表用户接收到这个文件,将其存放在用户目录中。
二、关于FTP服务器
下载并安装easyftp_sever,打开即可启用ftp服务器
首先添加用户,设置用户名称,登录密码及访问权限等来约束客户端的连接
出现以下界面则表示服务器已开启,主机ip即服务器ip,一般通用的ftp端口为21,web端口为8080
三、文件上传
要想实现文件上传,首先需要与ftp服务器建立连接,例如要想在eclipse中通过代码与服务器实现连接,则需要项目工程中导入相关jar包,完成相关配置
分步讲解:
1. 首先创建ftpClient对象:
2. 连接至ftp服务器并登录
通过 connect()方法连接服务器,要知道的是,这个方法中参数一是ftp服务器的IP地址,参数二是ftp服务器的端口号
通过 login()方法登录服务器,这里的参数传入服务器中添加的用户名和密码
3. 接下来就是设置上传保存至服务器的文件名,例如将文件名设置为“xyr”
下面代码中,首先定义了切换路径(changeWorkinDirectory()方法)的返回值,通过判断返回值为true或false来判断指定文件是否存在,如果不存在,则先创建指定名称的文件文件夹(makeDirectory()方法),再进入文件夹,用于后面保存想要上传的内容
4. 在存储前还需要设置文件的类型,通过setFileType()方法设置(否则可能会出现上传乱码的现象)
5. 创建文件输入流用于读取想要上传的本地文件
这里因为输入流本身使用完应该关闭,所以直接将它写在了try块里
6. 最后就是使用 storeFile()方法 将本地文件上传至ftp服务器
完整实现代码:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.SocketException;
import org.apache.commons.net.ftp.FTPClient;
public class FtpTest {
public static void main(String[] args) {
// 创建ftpClient对象
FTPClient ftpClient = new FTPClient();
// 创建输入流用于读取本地图片
try (FileInputStream localIn = new FileInputStream("C:\\text Java\\doubanPic\\m.webp")) {
// 链接服务器
ftpClient.connect("192.168.254.185", 21);
// 登录
ftpClient.login("admin", "admin");
// 切换至指定文件
boolean isChange = ftpClient.changeWorkingDirectory("xyr");
System.out.println(isChange);
if(!isChange) {
ftpClient.makeDirectory("xyr");
isChange =ftpClient.changeWorkingDirectory("xyr");
}
System.out.println(isChange);
// 存储前设置文件类型
ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
// 存储文件(将本地文件上传至服务器)
// 参数一:ftp服务器存储文件的位置(目录+文件名)
// 参数二:从本地获取文件的输入流
ftpClient.storeFile("xu.jpg", localIn);
} catch (SocketException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
四、下载文件
分步讲解:
1. 与上传文件相同,首先要创建ftpClient对象
2. 连接并登录FTP服务器
3. 与上传文件相同,接下来该 指定下载文件 及 下载前更改格式
4. 创建文件输出流,用于将从ftp服务器下载的文件写入到本地
下面我顺便设置了保存至本地的文件名称
5. 使用 retrieveFile()方法从ftp服务器下载文件
完整实现代码:
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.SocketException;
import org.apache.commons.net.ftp.FTPClient;
public class Download {
public static void main(String[] args) {
FTPClient ftpClient = new FTPClient();
String downLoadName = "m.webp";
try (FileOutputStream out = new FileOutputStream("D:\\ftpTest\\xyr\\" + downLoadName)) {
ftpClient.connect("192.168.254.146", 21);
ftpClient.login("root", "root");
ftpClient.changeWorkingDirectory("ftpTest");
ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
ftpClient.retrieveFile(downLoadName,out);
} catch (SocketException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
小结
以上便是基于ftp的文件上传与下载的代码实现过程,不难看出只有拥有了FTP服务器,客户端才能实现文件上传下载一系列操作,此外ftp协议允许TCP/IP网络上的两台或多台(多个客户端)计算机之间进行文件传输。
边栏推荐
- unity 报错 Unsafe code may only appear if compiling with /unsafe. Enable “Allow ‘unsafe‘ code“ in Pla
- What do you know about FITC-labeled biotin (FITC-biotin|CAS: 134759-22-1)?
- 【Grpc】简介
- y92.第六章 微服务、服务网格及Envoy实战 -- Envoy基础(三)
- el-input保留一位小数点
- -向量点积-
- 【论文笔记】基于深度学习的机器人抓取虚拟仿真实验教学系统
- DP 优化方法合集
- 2022金九银十工作潮,怎么样才能成功跳槽面试拿到高薪呢?
- 宽带由20M换为100M
猜你喜欢
Shader Graph learns various special effects cases
分析 20 个 veToken 生态系统协议 这种代币模型为何受欢迎?
03|Process Control
【kali-密码攻击】(5.2.1)密码分析:Hash Identifier(哈希识别)
PEG derivative Biotin-PEG1-OH (cas: 95611-10-2, 2-biotinaminoethanol) advantage description
How to add control panel to right click menu in win7
什么是一网统管?终于有人讲明白了
OSS-访问oss生成的url无法访问,直接下载问题
2022金九银十工作潮,怎么样才能成功跳槽面试拿到高薪呢?
卷积神经网络识别验证码
随机推荐
-红与黑-
R语言使用glm函数构建逻辑回归模型(logistic)、使用subgroupAnalysis函数进行亚组分析并可视化森林图
你有对象类,我有结构体,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang结构体(struct)的使用EP06
Not, even the volume of the king to write code in the company are copying and pasting it reasonable?
2022金九银十工作潮,怎么样才能成功跳槽面试拿到高薪呢?
彩色袜子题
Biotin-Cy2 Conjugate, Biotin-Cy2 Conjugate_Cy2 Biotin Conjugate
Sikuli's Automated Testing Technology Based on Pattern Recognition
-Vector Dot Product-
How to add control panel to right click menu in win7
Summary of Web Performance Testing Models
芯片资讯|半导体收入增长预计将放缓至 7%,蓝牙芯片需求依然稳步增长
CAS:183896-00-6 (Biotin-PEG3-C3-NH2) PEG derivative
Aptos 深度解读:机遇、挑战与风险
MySQL最大连接数限制如何修改
信息化和数字化的核心差异
什么是 PWA
SonarQube升级记录:7.8->7.9->8.9
DALL·E-2是如何工作的以及部署自己的DALL·E模型
Shader Graph learns various special effects cases