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方式上傳文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章