当前位置:网站首页>基于FTP协议的文件上传与下载
基于FTP协议的文件上传与下载
2022-08-08 05:58:00 【[email protected]】
一、什么是FTP?
FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:下载(Download)和上传(Upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。
二、FTP服务器

使用ftp服务器进行文件传输前,要先对ftp权限进行设置

网页界面如下:

Java连接FTP服务器需要导入jar包

三、上传
package com.apesource.demo;
import java.io.FileInputStream;
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:\\test\\run\\yy1.jpg")) {
// step1:连接服务器
ftpClient.connect("192.168.254.159",21);
// step2:登录
ftpClient.login("qmy", "qmy");
// step3:操作
// 切换至指定位置
boolean isChange = ftpClient.changeWorkingDirectory("qmy");
System.out.println("切换工作目录1:"+isChange);
if(!isChange) {
ftpClient.makeDirectory("qmy");
isChange = ftpClient.changeWorkingDirectory("qmy");
}
System.out.println("切换工作目录2:"+isChange);
// 存储文件(将本地文件上传至ftp服务器
// 参数1:ftp服务器的存储位置(目录+文件夹)
// 参数2:本地的文件输入流
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);// 存储前设置文件类型
ftpClient.storeFile("dir01/stu/qmy.jpg", localIn);// 存储
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
运行结果:
上传结果
四、下载
package com.apesource.demo;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.net.ftp.FTPClient;
public class Download {
public static void main(String[] args) {
String downloadFileName = "yy1.jpg";
FTPClient ftpClient = new FTPClient();
try (FileOutputStream out = new FileOutputStream("E:\\test\\run\\qmy\\"+downloadFileName)) {
ftpClient.connect("192.168.254.159",21);
ftpClient.login("qmy", "qmy");
ftpClient.changeWorkingDirectory("qmy");// 切换目录
// 下载文件(获取FTP服务器指定目录(qmy)的文件
// 参数1:服务器指定文件
// 参数2:本地输出流(负责下载后写入)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
boolean isRetrieve = ftpClient.retrieveFile(downloadFileName, out);
System.out.println("下载成功?"+isRetrieve);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}运行结果:
下载结果:

版权声明
本文为[[email protected]]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_49194330/article/details/126198023
边栏推荐
- Connect two tables to update the third table (updata) in postgresql
- uvm简介
- Educational Codeforces Round 133 (Rated for Div. 2) C Supplement
- 28. Anomaly detection
- Typescript namespace
- Synchronization and Asynchrony of Clocks
- Database sub-database sub-table, when?How to divide?
- Runtime - KVC, KVO principle
- 【图像处理】matlab基础图像处理 | 图像载入、图像添加噪声、图像滤波、图像卷积
- flex布局缺点
猜你喜欢

Unity-CharacterController (Character Controller)

Horizontal version of the generated image uniapp H5 signature

查询时间内用户分布的sql语句

缓存存在的问题:缓存穿透、缓存击穿、缓存雪崩

Rust开发——Struct使用示例

Basic tools - NETCAT (Telnet - banner, transfer text message)

Redis In Action —— Advanced —— 数据主从同步原理 —— 全量同步 与 增量同步 工作流程及原理 —— 以及如何利用 docker 容器技术快速模拟单机 Redis 集群

Redis 的内存策略

Runtime——KVC,KVO原理

【MySQL】——事务的基本概念
随机推荐
Week 8 Generative Adversarial Networks
并查集按秩合并rank数组
Efficient and beautiful scrolling component Slivers of Flutter tutorial (tutorial includes source code)
0 dictionary tree/string medium LeetCode676. Implement a magic dictionary
【数学建模】微分方程求解 | dsolve函数 | ode45函数
数据库系统原理与应用教程(080)—— MySQL 练习题:操作题 186-193(二十四):综合练习
自动化工具
VSCode已经设置过为中文但变成英文的解决办法
cnn卷积神经网络反向传播,卷积神经网络维度变化
The tests that need to be done in the development of medical device products
webstorage
Typescript namespace
Pit Filling Simulated Hash Table
Cs software UI building methods
string hash hash value
MySQL5
仿QQ好友列表,QListWidget!
[Untitled] I haven't thought of a name yet
postgis 数据表 迁移时错误解决方法
postgres 安装 14 版本出现错误提示解决办法