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

目录

FTP协议

文件上传

文件下载


FTP协议

        FTPFile Transfer Protocol文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。

        默认情况下FTP协议使用TCP端口中的 2021这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。

        了解了FTP协议,那么如何使用Java语言实现基于FTP协议的文件上传与下载呢?

        FTP也是一个客户/服务器系统。用户通过一个客户机程序连接至在远程计算机上运行的服务器程序。依照 FTP 协议提供服务,进行文件传送的计算机就是 FTP服务器,而连接FTP服务器,遵循FTP协议与服务器传送文件的电脑就是FTP客户端。

        首先我们需要一个FTP服务器,用于给用户提供一个FTP共享目录,用户通过输入密码和账号登录FTP服务器,可下载或上传文件。

打开FTP服务器并创建一个用户,设置权限

如图所示:

 

        准备好FTP服务器之后,接下来我们使用Java代码模拟FTP客户端在FTP服务器上传和下载文件。

        导入jar包:

文件上传

上传步骤

  • 创建FTP客户端连接对象FTPClient
  • 创建输入流读取本地上传文件
  • 建立FTP连接
  • 登录
  • 通过storeFile()方法将本地文件上传至服务器
  • 断开FTP连接

代码实现如下:

package my.demo;

import java.io.FileInputStream;
import java.io.IOException;

import org.apache.commons.net.ftp.FTPClient;

public class FTPDemoUpload {
	public static void main(String[] args) {
		
		//创建FTP客户端连接对象
		FTPClient ftpClient = new FTPClient();
		
		//输入流,用于读取本地文件
		try (FileInputStream localIn = new FileInputStream("E:\\image\\傻眼.jpg")) {
			
			//建立FTP连接
			ftpClient.connect("192.168.254.***", 21);
			
			//登录
			ftpClient.login("admin", "admin");
			
			//存储文件(将本地文件上传至服务器)
			//参数1:ftp服务器的存储位置(目录+文件名)
			//参数2:本地的文件输入流
			ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
			
			//切换至指定目录
			boolean isCahange = ftpClient.changeWorkingDirectory("zzy");
			System.out.println("切换目录:" + isCahange);
			if(!isCahange) {
				ftpClient.makeDirectory("zzy");
				isCahange = ftpClient.changeWorkingDirectory("zzy");
			}
			System.out.println("切换目录:" + isCahange);
			
			
		 	boolean isOK = ftpClient.storeFile("zzy.jpg", localIn);
			System.out.println(isOK);
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				ftpClient.disconnect();//断开FTP连接 
			} catch (Exception e2) {
			}
		}
		
	}

}

文件下载

下载步骤:

  • 创建FTP客户端连接对象FTPClient
  • 创建输出流将FTP服务器的文件写入本地
  • 建立FTP连接
  • 登录
  • 通过retrieveFile()方法传入输出流将FTP服务器文件下载到本地指定路径
  • 断开FTP连接

代码实现如下:

package my.demo;

import java.io.FileOutputStream;
import java.io.IOException;
import java.net.SocketException;

import org.apache.commons.net.ftp.FTPClient;

public class FTPDemoDownload {
	public static void main(String[] args) {
		String fileName = "zzy.jpg";
			//
			FTPClient ftpClient = new FTPClient();
		try {
			
			ftpClient.connect("192.168.254.***", 21);// 连接
			ftpClient.login("admin", "admin");//登录
			ftpClient.changeWorkingDirectory("zzy");//切换目录
			
			try(FileOutputStream fos = new FileOutputStream("D:\\"+fileName);){
				
				//设置文件类型
				ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
				
				//下载文件(获取FTP服务器指定目录的文件)
				//参数1:服务器指定文件
				//参数2:本地输出流(负责下载后写入)
				boolean isRetrieve = ftpClient.retrieveFile(fileName, fos);
				System.out.println("下载成功?"+isRetrieve);
			}
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				ftpClient.disconnect();//断开连接
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}
}

  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值