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


    1.关于FTP协议

           FTP(文件传输协议)TCP/IP协议组中的协议之一,作为网络共享文件的传输协议,在网络应用软件中具有广泛的应用。FTP协议的全称为File Transfer Protocol,FTP的目标是提高文件的共享性和可靠高效地传送数据。

    2.FTP的工作模式

             作为一个文件传输协议,是一个客户端/服务器系统。它的任务就是从一台计算机将文件传送到另一台计算机。既然要在不同的电脑上高效的传输文件,就必须在两台电脑之间建立起联系,那我们可以让一台电脑充当服务器端,另一台电脑充当客户端,两者有着相同的网络端口名称,并且处在同一个局域网内。

              FTP的组成部分:FTP客户端、FTP服务器(存储文件)默认使用TCP端口中的20(用于传输数据)和21(用于传输控制信息)两个端口。

    FTP工作方式支持两种模式

    Standard( Port方式,主动方式)和Passive(PASV,被动方式)。

    (1)Porl(主动方式)

                 客户端连接成功后,主动告诉服务器数据连接的端口。

    (2)PASV(被动模式)

                  客户端连接成功后,在进行数据传输时临时连接服务器的20端口,利用20端口进行数据的传输。

             

    3.具体的JAVA代码参考案例

          在应用市场中有很多开启电脑服务器的应用程序,大家可以选择一个中意的,并且设置一个用户,方便客户端的连接,并设置用户权限。

       (1)上传Excel文件至FTP服务器

    1. // 上传Excel文件至FTP服务器的uploadToFTP方法
    2. //传入表格的列头部分和数据部分
    3. public boolean uploadToFTP(Vector<String> colNameVector ,
    4. VectorObject>> dataVector) {
    5. //生成一个临时的Excel文件
    6. File tempExcelFile = new File("D:\\AAAAA\\" + System.currentTimeMillis() +".xlsx");
    7. //将数据写入该Excel文件中
    8. exportExcel(colNameVector, dataVector, tempExcelFile);
    9. //上传
    10. FTPClient ftpclient = new FTPClient();
    11. try (FileInputStream in = new FileInputStream(tempExcelFile)) {
    12. //服务器的IP地址,网络接口和登录账号密码
    13. ftpclient.connect("***.***.***..***",21);
    14. boolean isLogin = ftpclient.login("admin", "admin");
    15. //提示登录成功
    16. System.out.println("登陆成功:" + isLogin);
    17. ftpclient.setFileType(FTPClient.BINARY_FILE_TYPE);
    18. ftpclient.storeFile(tempExcelFile.getName(), in);
    19. } catch (IOException e) {
    20. e.printStackTrace();
    21. return false;
    22. }finally {
    23. try {
    24. ftpclient.disconnect();
    25. } catch (IOException e) {
    26. e.printStackTrace();
    27. return false;
    28. }
    29. }
    30. return true;
    31. }

    (2)实现FTP的下载功能的downloadFileFromFTP方法:

    1. public boolean downloadFileFromFTP(String excelFiles) {
    2. File uploadDir = new File("D:\\games");
    3. if(!uploadDir.exists()) {
    4. uploadDir.mkdir();
    5. }
    6. FTPClient ftpclient = new FTPClient();
    7. try (FileOutputStream out = new FileOutputStream("D:\\FilesDownLoad\\" + excelFiles)) {
    8. ftpclient.connect("***.***.***..***",21);
    9. boolean isLogin = ftpclient.login("admin", "admin");
    10. System.out.println("登陆成功:" + isLogin);
    11. ftpclient.setFileType(FTPClient.BINARY_FILE_TYPE);
    12. boolean isretrieve = ftpclient.retrieveFile(excelFiles, out);
    13. return isretrieve;
    14. } catch (IOException e) {
    15. e.printStackTrace();
    16. }finally {
    17. try {
    18. ftpclient.disconnect();
    19. } catch (IOException e) {
    20. e.printStackTrace();
    21. return false;
    22. }
    23. }
    24. return false;
    25. }

  • 相关阅读:
    K8S名称空间和资源配额
    docker基础学习
    力扣每日一题48:旋转图像
    面试题汇总
    【操作系统】2.1 进程与线程总结
    使用xshell linux安装nodejs,CentOS下安装并配置nodejs环境教程
    x86_64、AArch64、ARM32、LoongArch64、RISC-V
    【云原生 | Docker 高级篇】10、Docker 资源配额
    14、ffmpeg中进进行硬件编码和解码的片段程序_cuda进行rgb2yuv和yuv2rgb
    04_一个字符串是否包含多个子字符串判断
  • 原文地址:https://blog.csdn.net/weixin_54535063/article/details/126194671