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


            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服务器

    1. // 传入我们的IP地址以及服务器端口号
    2. ftpClient.connect("192.168.137.1", 21);

    (3)登录FTP服务器

    1. // 输入我们在FTP服务器中配置好的用户名和密码
    2. ftpClient.login("admin", "admin");

    (4)为确保我们的文件能够上传成功,我们在FTP服务器中切换上传目录

    1. if (!ftpClient.changeWorkingDirectory("upload")) {
    2. // 创建目录
    3. ftpClient.makeDirectory("upload");
    4. // 切换
    5. ftpClient.changeWorkingDirectory("upload");
    6. }

    (5)设置文件类型

    ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);

    (6)上传文件

    1. // 要上传的文件
    2. File tempExcelFile = new File("D:\\IOTest\\tempFile\\data.xlsx");
    3. // 通过输入流包装
    4. FileInputStream in = new FileInputStream(tempExcelFile)
    5. // 使用storeFIle方法上传
    6. ftpClient.storeFile(tempExcelFile.getName(), in);

    最终我们可以看到在FTP服务器设置的文件夹内可以查看到刚才上传的文件

     二、从FTP服务器上下载文件

    下载和上传类似,同样的是先进行连接、登录、设置文件类型,最后下载

    具体代码实现如下:

    1. // 创建FTP客户端对象
    2. FTPClient ftpClient = new FTPClient();
    3. // 连接FTP服务器
    4. ftpClient.connect("192.168.137.1", 21);
    5. // 登录FTP服务器
    6. ftpClient.login("admin", "admin");
    7. // 设置文件类型
    8. ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
    9. // 设置要下载的文件名称
    10. String fileName = "java.jpg";
    11. // 创建输出流,传入要下载的位置
    12. FileOutputStream out = new FileOutputStream("D:\\IOTest\\load\\" + 13 + ".jpg");
    13. // 下载(调用retrieveFile()方法实现下载)
    14. ftpClient.retrieveFile(fileName, out);

    最终,我们能看到文件已经成功的下载到本地了

     

  • 相关阅读:
    【微信h5】获取用户openid:基于vue3+springBoot
    【并发编程】线程安全性问题
    zephyr线程生命周期
    对比多家互联网医院系统技术代码:数字医疗服务的背后
    用vscode进行远程主机开发
    【计算机网络】网络层:IP数据报首部
    VScode+YOLOv8+深度相机D435i实现物体追踪
    Zabbix技术分享——使用Zabbix监控系统日志文件大小
    【实践篇】领域驱动设计:DDD工程参考架构
    R语言ggplot2可视化:使用ggpubr包的ggboxplot函数可视化箱图、width参数自定义箱图中箱体的宽度
  • 原文地址:https://blog.csdn.net/qq_17845335/article/details/126194757