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


    目录

    一、FTP协议

    二、easyftp_server基本配置

    三、文件上传 

    四、下载文件 

    五、小扩展---获取FTP指定目录下的文件

    一、FTP协议

            FTP是File Transfer Protocol,文件传输协议,是一种应用层的协议,主要面向文件。(网页的默认端口号8880,ftp的代理服务器的默认端口号是21)
            此外,FTP是基于C/S模式而设计的。在进行FTP操作的时候,即需要客户应用程序,也需要服务器端程序。我们一般会先在自己的计算机中执行FTP客户应用程序,在远程服务器中执行FTP服务器应用程序,这样,就可以通过FTP客户应用程序和FTP进行连接。连接成功后,可以进行各种操作。在FTP中,客户机只提出请求各接收服务,服务器只接收请求和执行服务。
         下面主要介绍使用easyftp_server进行文件上传与下载。

    二、easyftp_server基本配置

    启动easyftp_server服务器;

     

    创建一个用户并设置用户名、密码和文件上传的主目录,以及设置相关的权限;

    三、文件上传 

    首先创建FTP协议的客户端对象

    FTPClient ftpClient = new FTPClient();

     其次连接FTP服务器,传入IP地址和端口号

    ftpClient.connect("192.168.xxx.xxx",21);

     最后登录,传入用户名和密码,即客户端和服务器连接成功。

    ftpClient.login("xxxxx", "xxxxx");

     接下来就要上传文件,首先切换指定目录(也就是需要上传到的文件夹);

    ftpClient.changeWorkingDirectory("XXXX");

    其次存储文件(就是将本地文件上传至FTP服务器),需要用到storeFile()方法,参数1:ftp服务器的存储位置(目录+文件名),参数2:本地的文件输入流:FileInputStream localIn = new FileInputStream("e:\\xxx.jpg")

    1. ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); //存储前设置文件类型
    2. ftpClient.storeFile("xxx.jpg",localIn); //存储

    最后断开连接

    ftpClient.disconnect();

    四、下载文件 

     首先创建FTP协议的客户端对象

    FTPClient ftpClient = new FTPClient();

     其次连接FTP服务器,传入IP地址和端口号

    ftpClient.connect("192.168.xxx.xxx",21);

     最后登录,传入用户名和密码,即客户端和服务器连接成功。

    ftpClient.login("xxxxx", "xxxxx");

     接下来就要下载文件,首先切换指定目录(也就是需要从哪个文件夹下载);

    ftpClient.changeWorkingDirectory("XXXX");

    其次存储文件(就是获取FTP服务器指定目录的文件),需要用到retrieveFile()方法,参数1:服务器指定的文件,参数2:本地的文件输出流:FileOutputStream out = new FileOutputStream("E:\\test\\" + loadName),loadName指定下载的文件名

    1. ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
    2. boolean isRetrive = ftpClient.retrieveFile(loadName, out);
    3. System.out.println("下载成功?" + isRetrive);

    最后断开连接

    ftpClient.disconnect();

    五、小扩展---获取FTP指定目录下的文件 

    1.创建FTP协议的客户端对象ftpClient

    2.连接并登录

    3.切换至工作目录

    4.获取该目录下的所有文件ftpClient.listFiles(),得到一个FTPFile[]的数组,遍历该数组得到每一个文件

    5.获取文件创建时间:file.getTimestamp().getTime();

       获取文件大小:file.getSize()

      上传用户:file.getUser()

    1. public class FtpFileList {
    2. public static void main(String[] args) {
    3. FTPClient ftpClient = new FTPClient();
    4. try {
    5. //连接并登录
    6. ftpClient.connect("192.168.xxx.xxx",21);
    7. ftpClient.login("xxxx", "xxxx");
    8. //切换至工作目录
    9. boolean isChange = ftpClient.changeWorkingDirectory("xxxxx");
    10. System.out.println(isChange);
    11. //日期格式转换
    12. SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
    13. //获取该目录下的所有文件
    14. FTPFile[] files = ftpClient.listFiles();
    15. for(FTPFile file : files) {
    16. System.out.println("文件名称" + file.getName());
    17. //获取文件创建时间
    18. Date createDate = file.getTimestamp().getTime();
    19. //日期格式化
    20. String createDateStr = sdf.format(createDate);
    21. System.out.println("创建时间:" + createDateStr);
    22. //文件大小
    23. System.out.println("文件大小:" + file.getSize());
    24. //上传用户
    25. System.out.println("上传用户:" + file.getUser());
    26. System.out.println();
    27. }
    28. } catch (IOException e) {
    29. e.printStackTrace();
    30. }finally {
    31. try {
    32. ftpClient.disconnect();
    33. } catch (IOException e) {
    34. e.printStackTrace();
    35. }
    36. }
    37. }
    38. }

     以上就是对于基于FTP协议的文件上传与下载的分享,如有不当之处还请大家多多评论指正,喜欢文章的可以留下您的关注和点赞,一起学习,一起加油!

  • 相关阅读:
    设计模式-工厂方法模式(C++)
    VRTK4⭐二.VRTK4的项目基础配置
    2022网安保研经验帖
    织梦DedeCMS 0day RCE
    【AIGC调研系列】MiniCPM-Llama3-V2.5模型与GPT-4V对比
    Linux文件基本权限
    Java——String类常见方法
    【Jmeter+Influxdb+Grafana性能监控平台安装与部署】
    css基本样式之字体样式
    7.1 实现进程内存块枚举
  • 原文地址:https://blog.csdn.net/qq_46853052/article/details/126200685