package com.zuidaima.util;

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

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

import cn.hutool.core.date.DateUtil;
import cn.hutool.log.StaticLog;

public class FtpUtil {

	/**
	 * 
	 * Description: 向FTP服务器上传文件
	 * @param host  FTP服务器hostname
	 * @param fileName 上传到FTP服务器上的文件名 D:\\请叫我小C.txt
	 */
	public static boolean uploadFile(String host, String fileName) {
		return uploadFile(host, PropsUtil.getPort(), PropsUtil.getUserName(), PropsUtil.getPassword(),
				PropsUtil.getBasePath(), "", fileName);
	}

	/**
	 * Description: 向FTP服务器上传文件
	 * 
	 * @param host FTP服务器hostname
	 * @param port FTP服务器端口
	 * @param username FTP登录账号
	 * @param password FTP登录密码
	 * @param basePath FTP服务器基础目录
	 * @param filePath FTP服务器文件存放路径。例如分日期存放:/demo。文件的路径为ftp://192.168.1.122/demo/请叫我小C.txt
	 * @param fileName 上传到FTP服务器上的文件名 D:\\请叫我小C.txt
	 * @return 成功返回true,否则返回false
	 */
	public static boolean uploadFile(String host, int port, String username, String password, String basePath,
			String filePath, String fileName) {
		boolean result = false;
		boolean isReName = PropsUtil.getBooleanValByProps(PropsUtil.IS_RENAME);

		FTPClient ftp = new FTPClient();
		try {
			int reply;
			ftp.setControlEncoding(PropsUtil.getChartSet());
			ftp.connect(host, port);// 连接FTP服务器
			// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
			ftp.login(username, password);// 登录
			reply = ftp.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				StaticLog.info("连接FTP失败");
				ftp.disconnect();
				return result;
			}

			// 设置上传文件的类型为二进制类型
			ftp.setFileType(FTP.BINARY_FILE_TYPE);
			// 切换到上传目录
			ftp.changeWorkingDirectory(basePath);
			ftp.enterLocalPassiveMode();

			File file = new File(fileName);
			FileInputStream inStream = new FileInputStream(file);

			String newName = "";
			if (file.getName().toLowerCase().startsWith("d")) {
				newName = file.getName();
			} else {
				if (isReName) {
					newName = DateUtil.format(DateUtil.date(), PropsUtil.props.getStr(PropsUtil.FILE_SUFFIX)) + "_"
							+ file.getName();
				} else {
					newName = file.getName();
				}
			}
			// 上传文件
			if (!ftp.storeFile(newName, inStream)) {
				StaticLog.info("上传{}失败", newName);
				inStream.close();
				return result;
			}

			inStream.close();
			ftp.logout();
			result = true;

			StaticLog.info("上传ftp://{}成功,文件名{}", host, newName);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (IOException ioe) {
					ioe.printStackTrace();
				}
			}
		}
		return result;
	}
}
最近下载更多
Wynn99  LV2 6月25日
7482166  LV1 2022年12月9日
zw050256  LV7 2022年9月30日
decine  LV1 2022年8月3日
笨小孩一号  LV22 2022年8月2日
crosa_Don  LV18 2022年7月6日
唯一&Mike  LV3 2022年5月1日
xiex909  LV27 2022年3月31日
q13246932  LV1 2022年3月28日
微信网友_5859249697001472  LV1 2022年3月5日
最近浏览更多
Wynn99  LV2 6月25日
操作者 4月10日
暂无贡献等级
WBelong  LV8 3月29日
康日澜  LV9 2023年7月12日
iuchengli 2023年3月17日
暂无贡献等级
7482166  LV1 2022年12月9日
校园网  LV9 2022年11月4日
zw050256  LV7 2022年9月30日
decine  LV1 2022年8月2日
笨小孩一号  LV22 2022年8月2日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友