网络编程—基于FTP服务器的文件上传与下载

FTP协议简介

  • FTP协议是互联网上使用最广泛的文件传输协议

  • 采用客户端/服务器模式,基于TCP协议

  • FTP采用双TCP连接方式

        →控制连接使用TCP端口号21

        →数据连接使用TCP端口21

  • FTP有两种文件传输模式

  • FTP采用两种数据传输方式

        →主动方式

        在建立数据连接过程中,由服务器主动发起连接,因此被称为主动方式

        →被动方式

        由于建立数据通道时,FTP服务器被动等待FTP客户端的连接,因此称为被动模式

  • 控制连接

        →用于FTP客户端和FTP服务器之间传输FTP控制命令及命令执行信息。控制连接在整个会话期间一直保持打开

  • 数据连接

    →用于传输数据,包括数据上传、下载、文件等。数据传输结束后数据连接将终止

  • ASCII模式是默认的文件传输模式,主要特点是:

        →本地文件转换成标准的ASCII码再传输

        →适用于传输本地文件

  • 二进制流模式,主要特点是:

        →文件按照比特流的方式进行传输

        →适用于传送图片、mp3、mp4等格式的文件

Java语言实现基于FTP服务器的文件传输

    首先,需要下载好第三方的FTP服务器,我们只需要简单的设置用户名,登录密码,上传的目录及一些权限即可,大大方便了我们的操作。假设我的服务器地址是(192.168.254.12),账号:admin,密码:admin

    为了简单起见,我们假设FTP服务器和FTP客户端处于同一局域网中。

文件的上传

public class Upload{
    public static void main(String[] args){
        FTPClient ftpClient = new FTPClient();
        //创建文件输入流,用于读取本地的文件
        try(FileInputStream localIn = new FileInputStream("c:\\test\\jay.jpg")){
            //连接FTP服务器
            FTPClient.connect("192.168.254.12");
            //登录
            FTPClient.login("admin","admin");
            //存储文件(将本地文件上传至FTP服务器)
            //参数1:FTP服务器的存储位置(目录+文件名)
            //参数2:本地的文件输入流
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//存储前设置文件类型
            ftpClient.storeFile("dir/jay.jpg",localIn);//存储
        }catch(SocketException e){
            e.printStackTrace();
        }catch(FileNotFoundException e){
            e.printStackTrace();
        }catch(IOException e){
            e.printStackTrace();
        }finally{
            try{
                //关闭服务器连接
                ftpClient.disconnect();
            }catch (IOexception e)
                e.printStackTrace();
        }
    }
}

文件的下载

public class download{
    public static void main(String[] args){
        FTPClient ftpClitent = new FTPClient();
        //选择需要下载的目录
		File uploadDir = new File("D:\\JavaTest\\download");
        //判断当前目录是否存在
		if (!uploadDir.exists()) {
            //如果不存在,创建这个目录
			uploadDir.mkdir();
		}
        //创建文件输出流,用于下载文件时往磁盘里写入
		try (FileOutputStream out = new FileOutputStream("D:\\JavaTest\\download\\" +                 
            excelFileName)) {
            //连接FTP服务器
			ftpClitent.connect("192.168.254.12", 21);
            //登录
			boolean isLogin = ftpClitent.login("admin", "admin");
            //查看是否登录成功
			System.out.println("登录成功?" + isLogin);
            //下载文件
			ftpClitent.setFileType(FTPClient.BINARY_FILE_TYPE);
            //判断是否下载成功
			boolean isretrieve = ftpClitent.retrieveFile(excelFileName, out);
			System.out.println("下载成功?" + isRetrieve);
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		} finally {
			try {
                //关闭连接
				ftpClitent.disconnect();
			} catch (IOException e) {
				e.printStackTrace();
				return false;
			}
		}

    }
}

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值