Java实现跨服务器上传文件功能

package com.jiusi.util.httputil;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

/** * FTP服务器工具类 * */
public class FTPUtils {
	public static boolean storeFile(String url, int port, String userName, String password, String storePath,
			String fileName, InputStream is) {
		boolean result = false;
		FTPClient ftp = new FTPClient();
		try {
			// 连接至服务器,端口默认为21时,可直接通过URL连接
			ftp.connect(url, port);
			// 登录服务器
			ftp.login(userName, password);
			// 判断返回码是否合法
			if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
				// 不合法时断开连接
				ftp.disconnect();
				// 结束程序
				return result;
			}
			// 判断ftp目录是否存在,如果不存在则创建目录,包括创建多级目录
			String s = "/" + storePath;
			String[] dirs = s.split("/");
			ftp.changeWorkingDirectory("/");
			// 按顺序检查目录是否存在,不存在则创建目录
			for (int i = 1; dirs != null && i < dirs.length; i++) {
				if (!ftp.changeWorkingDirectory(dirs[i])) {
					if (ftp.makeDirectory(dirs[i])) {
						if (!ftp.changeWorkingDirectory(dirs[i])) {
							return false;
						}
					} else {
						return false;
					}
				}
			}
			// 设置文件操作目录
			ftp.changeWorkingDirectory(storePath);
			// 设置文件类型,二进制
			ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
			// 设置缓冲区大小
			ftp.setBufferSize(3072);
			// 上传文件
			result = ftp.storeFile(fileName, is);
			// 关闭输入流
			is.close();
			// 登出服务器
			ftp.logout();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				// 判断输入流是否存在
				if (null != is) {
					// 关闭输入流
					is.close();
				}
				// 判断连接是否存在

				if (ftp.isConnected()) { // 断开连接
					ftp.disconnect();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return result;
	}

	public static boolean retrieveFile(String url, int port, String userName, String password, String remotePath,
			String fileName, String localPath) {
		boolean result = false;
		FTPClient ftp = new FTPClient();
		OutputStream os = null;
		try { // 连接至服务器,端口默认为21时,可直接通过URL连接
			ftp.connect(url, port); // 登录服务器
			ftp.login(userName, password); // 判断返回码是否合法
			if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) { // 不合法时断开连接
				ftp.disconnect(); // 结束程序
				return result;
			} // 设置文件操作目录
			ftp.changeWorkingDirectory(remotePath); // 设置文件类型,二进制
			ftp.setFileType(FTPClient.BINARY_FILE_TYPE); // 设置缓冲区大小
			ftp.setBufferSize(3072); // 设置字符编码
			ftp.setControlEncoding("UTF-8"); // 构造本地文件对象
			File localFile = new File(localPath + "/" + fileName); // 获取文件操作目录下所有文件名称
			String[] remoteNames = ftp.listNames(); // 循环比对文件名称,判断是否含有当前要下载的文件名
			for (String remoteName : remoteNames) {
				if (fileName.equals(remoteName)) {
					result = true;
				}
			} // 文件名称比对成功时,进入下载流程
			if (result) { // 构造文件输出流
				os = new FileOutputStream(localFile); // 下载文件
				result = ftp.retrieveFile(fileName, os); // 关闭输出流
				os.close();
			} // 登出服务器
			ftp.logout();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try { // 判断输出流是否存在
				if (null != os) { // 关闭输出流
					os.close();
				} // 判断连接是否存在
				if (ftp.isConnected()) { // 断开连接
					ftp.disconnect();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return result;
	}

	public static boolean deleteFile(String url, int port, String userName, String password, String remotePath,
			String fileName) {
		boolean result = false;
		FTPClient ftp = new FTPClient();
		try { // 连接至服务器,端口默认为21时,可直接通过URL连接
			ftp.connect(url, port); // 登录服务器
			ftp.login(userName, password); // 判断返回码是否合法
			if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) { // 不合法时断开连接
				ftp.disconnect(); // 结束程序
				return result;
			} // 设置文件操作目录
			ftp.changeWorkingDirectory(remotePath); // 设置文件类型,二进制
			ftp.setFileType(FTPClient.BINARY_FILE_TYPE); // 设置缓冲区大小
			ftp.setBufferSize(3072); // 设置字符编码
			ftp.setControlEncoding("UTF-8"); // 获取文件操作目录下所有文件名称
			String[] remoteNames = ftp.listNames(); // 循环比对文件名称,判断是否含有当前要下载的文件名
			for (String remoteName : remoteNames) {
				if (fileName.equals(remoteName)) {
					result = true;
				}
			} // 文件名称比对成功时,进入删除流程
			if (result) { // 删除文件
				result = ftp.deleteFile(fileName);
			} // 登出服务器
			ftp.logout();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try { // 判断连接是否存在
				if (ftp.isConnected()) { // 断开连接
					ftp.disconnect();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return result;
	}

	public static void main(String[] args) throws FileNotFoundException {
		try {
			FileInputStream fis = new FileInputStream(
					new File("D:/apache-tomcat-8.0.48/webapps/website/uploaddata/2019/2019.docx"));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		File file = new File("D:/apache-tomcat-8.0.48/webapps/website/uploaddata/2019/2019.docx");
		InputStream is = new FileInputStream(file);
		// System.out.println(storeFile("192.168.0.201", 21, "administrator",
		// "jiusi.net123!", "D:/website", "2019.docx", is));
		System.out.println(retrieveFile("192.168.0.201", 21, "administrator", "jiusi.net123!", "D:/website",
				"2019.docx", "D:/apache-tomcat-8.0.48/webapps/website/uploaddata/2019/2019.docx"));
		// System.out.println(deleteFile("127.0.0.1", 21, "feili", "feili", //
		// "testpath", "1.txt"));
	}
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yyx-Gary

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值