Java实现FTP的文件上传详解编程语言

1、需要引入commons-net-xxx.jar包

2、配置文件

ftpHost=192.168.11.9 
ftpPort=21 
ftpUsername=myusername 
ftpPassword=mypassword 
ftpBashPath=D/://myftp 

3、FtpUtil工具类

package com.itmyhome; 
 
import java.io.IOException; 
import java.io.InputStream; 
import java.net.SocketException; 
import org.apache.commons.net.ftp.FTP; 
import org.apache.commons.net.ftp.FTPClient; 
import org.apache.commons.net.ftp.FTPReply; 
 
/** 
 * FTP工具类 
 * 2019-05-22 
 * @author itmyhome 
 * 
 */ 
public class FtpUtil {
    
 
	public static String FTP_HOST = SystemConfig.getString("ftpHost"); // FTP 主机名 
	public static int FTP_PORT = Integer.parseInt(SystemConfig.getString("ftpPort")); // FTP端口 
	public static String FTP_USERNAME = SystemConfig.getString("ftpUsername"); // FTP 用户名 
	public static String FTP_PASSWORD = SystemConfig.getString("ftpPassword"); // FTP  用户密码 
 
	/** 
	 * Description: 向FTP服务器上传文件 
	 * @param basePath FTP服务器基础目录 
	 * @param filePath FTP服务器文件存放路径。例如分日期存放:/2015/01/01。文件的路径为basePath+filePath 
	 * @param filename 上传到FTP服务器上的文件名 
	 * @param input  输入流 
	 * @return 成功返回true,否则返回false 
	 */ 
	public static boolean uploadFile(String basePath, String filePath, 
			String filename, InputStream input) {
    
		boolean result = false; 
		FTPClient ftp = new FTPClient(); 
		try {
    
			int reply; 
			ftp.connect(FTP_HOST, FTP_PORT);// 连接FTP服务器 
			// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器 
			reply = ftp.getReplyCode(); 
			if (!FTPReply.isPositiveCompletion(reply)) {
    
				ftp.disconnect(); 
				return result; 
			} else {
    
				ftp.login(FTP_USERNAME, FTP_PASSWORD);// 登录 
				ftp.enterLocalPassiveMode(); 
			} 
			// 切换到上传目录 
			if (!ftp.changeWorkingDirectory(filePath)) {
    
				// 如果目录不存在创建目录 
				String[] dirs = filePath.split("////"); 
				String tempPath = basePath; 
				for (String dir : dirs) {
    
					if (null == dir || "".equals(dir)) 
						continue; 
					tempPath += "//" + dir; 
					if (!ftp.changeWorkingDirectory(tempPath)) {
    
						ftp.makeDirectory(dir); 
						ftp.changeWorkingDirectory(dir); 
					} 
				} 
			} 
			// 设置上传文件的类型为二进制类型 
			ftp.enterLocalPassiveMode(); 
			ftp.setFileTransferMode(FTP.STREAM_TRANSFER_MODE); 
			result = ftp.setFileType(FTPClient.BINARY_FILE_TYPE); 
 
			// 上传文件 
			if (!ftp.storeFile(filename, input)) {
    
				return result; 
			} 
			input.close(); 
			ftp.logout(); 
			result = true; 
		} catch (IOException e) {
    
			e.printStackTrace(); 
		} finally {
    
			if (ftp.isConnected()) {
    
				try {
    
					ftp.disconnect(); 
				} catch (IOException ioe) {
    
				} 
			} 
		} 
		return result; 
	} 
 
	public static FTPClient getFtp() throws SocketException, IOException {
    
		FTPClient ftp = new FTPClient(); 
		ftp.connect(FTP_HOST, FTP_PORT);// 连接FTP服务器 
		ftp.login(FTP_USERNAME, FTP_PASSWORD);// 登录 
		ftp.enterLocalPassiveMode(); 
		return ftp; 
	} 
 
	public static void main(String[] args) {
    
		try {
    
			System.out.println(getFtp().getReplyCode()); 
		} catch (SocketException e) {
    
			e.printStackTrace(); 
		} catch (IOException e) {
    
			e.printStackTrace(); 
		} 
	} 
} 

完整代码已上传至Github 使用plupload及ftp方式上传文件

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/19180.html

(0)
上一篇 2021年7月19日 21:52
下一篇 2021年7月19日 21:52

相关推荐

发表回复

登录后才能评论