当前位置:网站首页>基于FTP协议的文件上传与下载
基于FTP协议的文件上传与下载
2022-08-08 06:27:00 【卡多希y】
FTP协议全称叫做文件传输协议,它用于在Internet上的控制文件的双向传输。在FTP的使用当中,经常会提到两个概念,“下载”和“上传”。下载文件就是从远程主机拷贝文件到自己的计算机中;上传就是从自己的计算机中拷贝到远程计算机,本篇文章将客户端和服务器同时使用一台主机进行操作。
使用FTP时,必须先登录,在FTP服务器上获得相应的权限后,才能进行上传和下载文件。也就是说,要想同哪一台 计算机传送文件,就必须具有哪一台计算机的适当授权。TCP/IP协议中,FTP标准命令TCP 端口号为21,Port方式数据端口为20。FTP的任务是从一台计算机将文件传送到另一台计算机,不受 操作系统的限制。
在进行使用FTP服务器来进行文件传输前,要先对FTP服务器的IP地址,端口,以及用户的权限进行设置。以我目前设置为例进行下边的操作。
在通过Java来进行连接FTP服务器之前先准备好相应的jar包(配置过maven中央仓库请忽略)
commons-net-3.6.jar下载地址:Central Repository: commons-net/commons-net/3.6
一、上传文件至FTP服务
(1)创建FTP客户端对象
FTPClient ftpClient = new FTPClient();(2) 连接FTP服务器
// 传入我们的IP地址以及服务器端口号
ftpClient.connect("192.168.137.1", 21);(3)登录FTP服务器
// 输入我们在FTP服务器中配置好的用户名和密码
ftpClient.login("admin", "admin");(4)为确保我们的文件能够上传成功,我们在FTP服务器中切换上传目录
if (!ftpClient.changeWorkingDirectory("upload")) {
// 创建目录
ftpClient.makeDirectory("upload");
// 切换
ftpClient.changeWorkingDirectory("upload");
}
(5)设置文件类型
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);(6)上传文件
// 要上传的文件
File tempExcelFile = new File("D:\\IOTest\\tempFile\\data.xlsx");
// 通过输入流包装
FileInputStream in = new FileInputStream(tempExcelFile)
// 使用storeFIle方法上传
ftpClient.storeFile(tempExcelFile.getName(), in);最终我们可以看到在FTP服务器设置的文件夹内可以查看到刚才上传的文件

二、从FTP服务器上下载文件
下载和上传类似,同样的是先进行连接、登录、设置文件类型,最后下载
具体代码实现如下:
// 创建FTP客户端对象
FTPClient ftpClient = new FTPClient();
// 连接FTP服务器
ftpClient.connect("192.168.137.1", 21);
// 登录FTP服务器
ftpClient.login("admin", "admin");
// 设置文件类型
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
// 设置要下载的文件名称
String fileName = "java.jpg";
// 创建输出流,传入要下载的位置
FileOutputStream out = new FileOutputStream("D:\\IOTest\\load\\" + 13 + ".jpg");
// 下载(调用retrieveFile()方法实现下载)
ftpClient.retrieveFile(fileName, out);最终,我们能看到文件已经成功的下载到本地了

边栏推荐
猜你喜欢

每日一题47-48

The state machine control shift register multisim simulation in the process of state variables and state transition conditions don't match

Problem solving about Unity's button event response error triggering UI events

Writing of Makefile (detailed example)

Unity_预制体批量编辑器

状态机控制移位寄存器multisim仿真过程中出现的状态变量和状态转移条件不匹配的问题

【Android安全】priv-app 系统应用权限

背包问题小结
![[Unity] GPU动画实现(二)——网格合并](/img/b3/3216d26674806172417f0df3cfce6c.png)
[Unity] GPU动画实现(二)——网格合并

网络开发相关
随机推荐
acwing 63rd weekly match【2022.08.06】
Unity HDRP中代码动态修改天空盒以及其他环境参数
Unity3D objects up and down or so rotation (is not affected by axes object itself)
How to get all child objects under an object in Unity
golang 服务诡异499、504网络故障排查
Unity_常用数据分析总结:折线图、条形图(柱状图)、扇形图(饼状图)、雷达图(属性图)
The state machine control shift register multisim simulation in the process of state variables and state transition conditions don't match
tcpdump进行IP抓包
【服务器运维】忘记XShell 服务器口令
使用websocket实现服务端主动发送消息到客户端
编程更改镜像总结
诡异的druid链接池链接断开故障经验总结
大型直播平台应用架构浅谈
Day38------网络相关
什么是类与对象?
Unity_预制体批量编辑器
【图形学】11 UnityShader入门(三)
使用js写一个2048
Math工具类的ceil()、floor()、round()方法源码阅读
minikube与kubectl版本不一致问题