当前位置:网站首页>基于FTP协议的文件上传与下载
基于FTP协议的文件上传与下载
2022-08-07 20:03:00 【露棉】
前言
FTP协议是文件传输协议,是一种应用层协议,基于C/S模式设计的。
一、FTP协议
FTP协议包括两部分,一是FTP客户端,二是FTP服务器。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
默认情况下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。
二、FTP服务器
1,首先我们需要准备服务器模拟工具EasyFtp-server.

2, 解压后,直接打开Ftpconsole.exe,创建账号。按照如图步骤依次点开并填写相关信息,在步骤4选择自己需要的权限最后点击确定即可。

3,在浏览器中访问FTP服务器,输入上图中的主机IP:8080,用户名和密码就是自己创建账号时,设置的密码.

三,上传
package F2;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.commons.net.ftp.FTPClient;
public class UpLoad {
public static void main(String[] args) {
FTPClient ftpClient=new FTPClient();
//创建文件输入流,用于读取本地文件
try (FileInputStream localIn=new FileInputStream("E:\\Apps\\doubanjiang\\1.jpg")){
//连接FTP服务器
ftpClient.connect("192.168.254.196",21);
//登录
ftpClient.login("admin", "admin");
boolean isChange=ftpClient.changeWorkingDirectory("/Guby");
System.out.println("切换工作目录"+isChange);
if(!isChange) {
ftpClient.makeDirectory("/Guby");
isChange=ftpClient.changeWorkingDirectory("/Guby");
}
System.out.println("切换工作目录2"+isChange);
//存储文件(将本地文件上传至FTP服务器)
//参数1:ftp服务器的存储位置(目录+文件名)
//参数2:本地的文件输入流
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.storeFile("1.jpg", localIn);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
运行结果:

四,下载
package F2;
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) {
String downloadFileName="1.jpg";
FTPClient ftpClient=new FTPClient();
try(
FileOutputStream out=new FileOutputStream("E:\\Apps\\doubanjiang"+ downloadFileName)){
ftpClient.connect("192.168.23.1",21);
ftpClient.login("admin", "admin");
ftpClient.changeWorkingDirectory("Apps");
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
boolean isRetrieve=ftpClient.retrieveFile(downloadFileName, out);
System.out.println("下载成功?"+isRetrieve);
}catch(SocketException e) {
e.printStackTrace();
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
运行结果:

下载后,结果如下图:

边栏推荐
猜你喜欢

OPENCV学习DAY11

【Token】JWT uses Token to log in

基于 Next.js实现在线Excel

Kuaishou management adjustment: Liu Feng and Ma Hongbin are respectively in charge of commercialization and internationalization

Typecho反序列化漏洞寻找思路

基于梯度的黑盒迁移对抗攻击(附代码)

canvas实现图片标记

数据库读取数据源配置实现动态数据源

Scala entry to proficient (Shang Silicon Valley study notes)

谷粒商城项目搭建
随机推荐
【C#语言】DataGridView排序筛选
After love or edge after executives adjustment: life ZhuangHai Wang Jing as CFO for President
国内多位架构大牛强烈推荐的大型分布式手册
UEditorPlus v2.3.0发布 图片抓取重构,多处样式优化
数据库读取数据源配置实现动态数据源
[2022 Nioke Duo School 4 C] Easy Counting Problem (generating function NTT)
Introduction to functions - understanding of the container_of macro
Mysql.解释器explain
redis详解(内部分享版)
在vscode里打开IntelliSense配置的方法
失败了n次以后,我总结了5种爬虫伪装技巧!
Chapter 3 Operators and Identifiers and Keywords
Better and more modern terminal tool than XShell!
introduction to hegel
PHP convert word file to image part 2
Transformer pytorch implements line-by-line detailed explanation
Mathematics Remainder Theorem Introduction
Linear Prediction and Autoregressive Modeling
Mathematical Symbols Reference Manual
Node crawls LOL hero information