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


    目录

    简介

    FTP服务器的配置

    基于FTP服务器的上传操作

    基于FTP服务器的下载操作


    简介

    FTP(File Transfer Protocol)即文件传输协议,是一种基于TCP的协议,采用客户/服务器模式。通过FTP协议,用户可以在FTP服务器中进行文件的上传或下载等操作。虽然现在通过HTTP协议下载的站点有很多,但是由于FTP协议可以很好地控制用户数量和宽带的分配,快速方便地上传、下载文件,因此FTP已成为网络中文件上传和下载的首选服务器。同时,它也是一个应用程序,用户可以通过它把自己的计算机与世界各地所有运行FTP协议的服务器相连,访问服务器上的大量程序和信息。FTP服务的功能是实现完整文件的异地传输。特点如下:

    (一)FTP使用两个平行连接:控制连接和数据连接。控制连接在两主机间传送控制命令,如用户身份、口令、改变目录命令等。数据连接只用于传送数据。

    (二)在一个会话期间,FTP服务器必须维持用户状态,也就是说,和某一个用户的控制连接不能断开。另外,当用户在目录树中活动时,服务器必须追踪用户的当前目录,这样,FTP就限制了并发用户数量。

    (三)FTP支持文件沿任意方向传输。当用户与一远程计算机建立连接后,用户可以获得一个远程文件也可以将一本地文件传输至远程机器。

    FTP服务器的配置

    先添加一个用户,并且设置登录密码和账号以及此用户的访问权限

     创建好之后就可以看到这个界面,证明服务器已开启:

     要想在程序中与FTP服务器建立连接,要先导入所需的JAR文件

    基于FTP服务器的上传操作

    1、创建FTP客户端对象:
    FTPClient ftpClient=new FTPClient();

    2、创建本地文件输入流,用来存储上传的文件:

    FileInputStream in=new FileInputStream(tempExcelFile);

    3.与FTP建立连接

    ftpClient.connect("192.168.254.189",21);

    4.登录FTP服务器

    boolean bol=ftpClient.login("###", "###");

    5.ftpClient.changeWorkingDirectory("hwh");

    6.设置文件类型:
    ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);

    7.将文件上传至FTP服务器:
    ftpClient.storeFile(tempExcelFile.getName(), in);

    代码实现:

    1. //上传
    2. public boolean uploadToFTP(Vector colNameVector,Vector> dataVector) {
    3. //1.生成一个临时文件
    4. File tempExcelFile=new File("D:\\TXT\\"+System.currentTimeMillis()+".xlsx");
    5. //2.将数据写入该Excel文件中(临时在本地进行存储)
    6. exportExcel(colNameVector, dataVector, tempExcelFile);
    7. //3.上传
    8. FTPClient ftpClient=new FTPClient();
    9. try (FileInputStream in=new FileInputStream(tempExcelFile);){
    10. ftpClient.connect("172.20.10.11",21);
    11. boolean bol=ftpClient.login("admin", "admin");
    12. System.out.println("登陆成功?"+bol);
    13. //设置文件上传类型
    14. ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
    15. //将本地文件上传至FTP服务器
    16. ftpClient.storeFile(tempExcelFile.getName(), in);
    17. } catch (FileNotFoundException e) {
    18. e.printStackTrace();
    19. return false;
    20. } catch (SocketException e) {
    21. e.printStackTrace();
    22. return false;
    23. } catch (IOException e) {
    24. e.printStackTrace();
    25. return false;
    26. }finally {
    27. try {
    28. ftpClient.disconnect();
    29. } catch (IOException e) {
    30. e.printStackTrace();
    31. return false;
    32. }
    33. }
    34. //删除临时文件
    35. tempExcelFile.delete();
    36. return true;
    37. }

    基于FTP服务器的下载操作

    1、创建FTP客户端对象:
    FTPClient ftpClient=new FTPClient();

    2、创建本地文件输出流,用来存储(写入)下载的文件:

    FileInoutStream out=new FileoutputStream(upLoad);

    3.与FTP建立连接

    ftpClient.connect("192.168.254.189",21);

    4.登录FTP服务器

    boolean bol=ftpClient.login("###", "###");

    5.切换目录
    ftpClient.changeWorkingDirectory("dir01");

    6.设置文件类型:
    ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);

    7.从FTP服务器中下载指定文件:

    boolean isretrieve=ftpClient.retrieveFile(excelFileName, out);

     return isretrieve;

    代码实现:

    1. public boolean downLoadFileToFTP(String excelFileName, File upLoad) {
    2. // if(!upLoad.exists()) {
    3. // upLoad.mkdir();
    4. // }
    5. //创建FTP客户端对象
    6. FTPClient ftpClient=new FTPClient();
    7. try (FileOutputStream out=new FileOutputStream(upLoad);){
    8. //FTP连接
    9. ftpClient.connect("172.20.10.11",21);
    10. //登录
    11. boolean isLogin=ftpClient.login("admin", "admin");
    12. System.out.println("登陆成功?"+isLogin);
    13. //设置文件下载类型
    14. ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
    15. //从FTP服务器中下载指定文件
    16. boolean isretrieve=ftpClient.retrieveFile(excelFileName, out);
    17. return isretrieve;
    18. } catch (FileNotFoundException e) {
    19. e.printStackTrace();
    20. return false;
    21. } catch (SocketException e) {
    22. e.printStackTrace();
    23. return false;
    24. } catch (IOException e) {
    25. e.printStackTrace();
    26. return false;
    27. }
    28. }
    29. }

  • 相关阅读:
    【1302. 层数最深叶子节点的和】
    主流组件库学习
    Ubuntu 22.04 安装 Docker Engine
    STL中最常见的三种容器vector、list、map对比分析
    面试:关于static静态变量的问题
    基于长短期神经网络的可上调容量PUP预测,基于长短期神经网络的可下调容量PDO预测,LSTM可调容量预测
    浅谈前端自定义VectorGrid矢量瓦片样式
    linux sed命令:sed替换命令使用环境变量,且环境变量中有文件分隔符时,sed命令不work (unknown option to s)
    [Docker]二.Docker 镜像,仓库,容器介绍以及详解
    Java——聊聊JUC中的锁(synchronized & Lock & ReentrantLock)
  • 原文地址:https://blog.csdn.net/weixin_49137294/article/details/126201295