当前位置: 首页 > ds >正文

基于FTP协议的文件上传与下载

目录

FTP协议

文件上传

文件下载


FTP协议

        FTPFile Transfer Protocol文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。

        默认情况下FTP协议使用TCP端口中的 2021这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。

        了解了FTP协议,那么如何使用Java语言实现基于FTP协议的文件上传与下载呢?

        FTP也是一个客户/服务器系统。用户通过一个客户机程序连接至在远程计算机上运行的服务器程序。依照 FTP 协议提供服务,进行文件传送的计算机就是 FTP服务器,而连接FTP服务器,遵循FTP协议与服务器传送文件的电脑就是FTP客户端。

        首先我们需要一个FTP服务器,用于给用户提供一个FTP共享目录,用户通过输入密码和账号登录FTP服务器,可下载或上传文件。

打开FTP服务器并创建一个用户,设置权限

如图所示:

 

        准备好FTP服务器之后,接下来我们使用Java代码模拟FTP客户端在FTP服务器上传和下载文件。

        导入jar包:

文件上传

上传步骤

  • 创建FTP客户端连接对象FTPClient
  • 创建输入流读取本地上传文件
  • 建立FTP连接
  • 登录
  • 通过storeFile()方法将本地文件上传至服务器
  • 断开FTP连接

代码实现如下:

package my.demo;import java.io.FileInputStream;
import java.io.IOException;import org.apache.commons.net.ftp.FTPClient;public class FTPDemoUpload {public static void main(String[] args) {//创建FTP客户端连接对象FTPClient ftpClient = new FTPClient();//输入流,用于读取本地文件try (FileInputStream localIn = new FileInputStream("E:\\image\\傻眼.jpg")) {//建立FTP连接ftpClient.connect("192.168.254.***", 21);//登录ftpClient.login("admin", "admin");//存储文件(将本地文件上传至服务器)//参数1:ftp服务器的存储位置(目录+文件名)//参数2:本地的文件输入流ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//切换至指定目录boolean isCahange = ftpClient.changeWorkingDirectory("zzy");System.out.println("切换目录:" + isCahange);if(!isCahange) {ftpClient.makeDirectory("zzy");isCahange = ftpClient.changeWorkingDirectory("zzy");}System.out.println("切换目录:" + isCahange);boolean isOK = ftpClient.storeFile("zzy.jpg", localIn);System.out.println(isOK);} catch (IOException e) {e.printStackTrace();}finally {try {ftpClient.disconnect();//断开FTP连接 } catch (Exception e2) {}}}}

文件下载

下载步骤:

  • 创建FTP客户端连接对象FTPClient
  • 创建输出流将FTP服务器的文件写入本地
  • 建立FTP连接
  • 登录
  • 通过retrieveFile()方法传入输出流将FTP服务器文件下载到本地指定路径
  • 断开FTP连接

代码实现如下:

package my.demo;import java.io.FileOutputStream;
import java.io.IOException;
import java.net.SocketException;import org.apache.commons.net.ftp.FTPClient;public class FTPDemoDownload {public static void main(String[] args) {String fileName = "zzy.jpg";//FTPClient ftpClient = new FTPClient();try {ftpClient.connect("192.168.254.***", 21);// 连接ftpClient.login("admin", "admin");//登录ftpClient.changeWorkingDirectory("zzy");//切换目录try(FileOutputStream fos = new FileOutputStream("D:\\"+fileName);){//设置文件类型ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//下载文件(获取FTP服务器指定目录的文件)//参数1:服务器指定文件//参数2:本地输出流(负责下载后写入)boolean isRetrieve = ftpClient.retrieveFile(fileName, fos);System.out.println("下载成功?"+isRetrieve);}} catch (SocketException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {try {ftpClient.disconnect();//断开连接} catch (IOException e) {e.printStackTrace();}}}
}

http://www.xdnf.cn/news/11638.html

相关文章:

  • assert_param函数的用法
  • 通过JAVA程序对ORACLE数据库进行操作并导出序列(SEQUENCE)
  • 常用搜索引擎 (转)
  • 社工必备查询网址汇总
  • 中国姓氏大全(常见508个,罕见740个)
  • STM32F429 19. RTC_实时时钟
  • “15个必备的自动化测试工具,助你构建2024年的自动化策略!“
  • 操作系统中的文件管理系统
  • 02 | 领域、子域、核心域、通用域和支撑域:傻傻分不清?
  • Wireshark 的抓包和分析,看这篇就够了!
  • 桌面虚拟化(VDI)的概述
  • TImage、TPaintBox、TPicture、TBitmap、TCanvas、TGraphic 的关系与区别
  • 使用ISAPI_Rewrite做实用的重定向
  • 蓝牙(Bluetooth)系统的无线接入
  • 视频网站提取原始地址之二——土豆
  • 数组知识点(详解)
  • JAF简介
  • 「DDD建模」DDD编程方法
  • 国标(GB)安全帽、安全救援头盔标准分享
  • SQL Server 入门学习总结---基础篇
  • jmeter函数---_setProperty 和 _property
  • 电竞玩家的云端盛宴!四大云电脑平台:ToDesk、顺网云、青椒云、极云普惠云实测大比拼...
  • ETCD: request timed out
  • Windows7系统smss.exe文件丢失问题
  • SDL2源代码分析
  • 【芯核架构】听你说你很了解ARM?
  • 汉字编码及区位码查询算法
  • LNK2001:unresolved external symbol,不确定的外部符号。汇总
  • 网络应用服务器配置(IIS和DNS)
  • ultral edit