Java代码--SFTP工具类



java sftp实现上传和下载。


          <!-- 包含SFTP功能 -->
		<dependency>
			<groupId>com.jcraft</groupId>
			<artifactId>jsch</artifactId>
			<version>0.1.54</version>
		</dependency>


import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Vector;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;

/**
 * @date 2018年3月20日 下午10:26:54
 * @doc sftp工具类 , 实现【本地到服务器】文件 【上传和下载】
 * @依赖包 <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId>
 *      <version>0.1.55</version> </dependency>
 */
public class SftpUtil {

	private static Log log = LogFactory.getLog(SftpUtil.class);
	private static String FILE = "config/sftp.properties";
	private static Session session = null;
	private static final int timeout = 10000;// 10秒

	private static void init() {
		// 如果有加密,可在此处解密
		String user = PropertiesUtils.getProperty(FILE, "sftp.user");
		String pass = PropertiesUtils.getProperty(FILE, "sftp.pass");
		String portStr = PropertiesUtils.getProperty(FILE, "sftp.port");
		String ip = PropertiesUtils.getProperty(FILE, "sftp.ip");

		Integer port = null;
		if (portStr != null && !"".equals(portStr)) {
			port = Integer.parseInt(portStr);
		}
		try {
			JSch jsch = new JSch();
			if (port <= 0 || port == null) {// 连接服务器,采用默认端口:默认22
				session = jsch.getSession(user, ip);
			} else { // 采用指定的端口连接服务器
				session = jsch.getSession(user, ip, port);
			}
			// 如果服务器连接不上,则抛出异常
			if (session == null) {
				log.info("session is null");
				return;
			}
			// 设置登陆超时时间 5秒
			session.connect(timeout);
			// 设置登陆主机的密码
			session.setPassword(pass);// 设置密码
			// 设置第一次登陆的时候提示,可选值:(ask | yes | no)
			session.setConfig("StrictHostKeyChecking", "no");

		} catch (Exception e) {
			log.error("SFTPUtil.init.exception1", e);
		}
	}

	/**
	 * @param src
	 *            服务器中的文件名:a.jpg
	 * @param dest
	 *            目的地的文件名称 ,带路径:E:/a.jpg
	 * @param tempPath
	 *            服务器路径
	 */
	public static void downloadFile(String src, String dest) {
		if (session == null) {
			init();
		}
		Channel channel = null;
		try {
			channel = (Channel) session.openChannel("sftp");
			channel.connect(timeout);
			ChannelSftp sftp = (ChannelSftp) channel;
			// 进入服务器指定的文件夹

			sftp.get(src, dest); // 下载
			sftp.quit();
			sftp.disconnect();

		} catch (Exception e) {
			log.error("SFTPUtil.uploadFile.exception1", e);
		} finally {
			if (channel != null) {
				channel.disconnect();
			}
		}
	}

	public static void downloadFile(String src, OutputStream output) {
		if (session == null) {
			init();
		}
		Channel channel = null;
		try {
			channel = (Channel) session.openChannel("sftp");
			channel.connect(timeout);
			ChannelSftp sftp = (ChannelSftp) channel;
			// 进入服务器指定的文件夹

			sftp.get(src, output);// 下载
			sftp.quit();
			sftp.disconnect();

		} catch (Exception e) {
			log.error("SFTPUtil.uploadFile.exception1", e);
		} finally {
			if (channel != null) {
				channel.disconnect();
			}
		}
	}

	/**
	 * @param is
	 *            文件输入流
	 * @param dest
	 *            文件名称 a.jpg
	 * @param tempPath
	 *            路径
	 */
	public static void uploadFile(InputStream is, String dest) {
		if (session == null) {
			init();
		}
		Channel channel = null;
		try {
			channel = (Channel) session.openChannel("sftp");
			channel.connect(timeout);
			ChannelSftp sftp = (ChannelSftp) channel;
			sftp.put(is, dest); // 上传
			sftp.quit();
			sftp.disconnect();

		} catch (Exception e) {
			log.error("SFTPUtil.uploadFile.exception1", e);
		} finally {
			if (channel != null) {
				channel.disconnect();
			}
		}
	}

	/**
	 * 上传文件
	 * 
	 * @param src
	 *            源文件地址 abc.jpg
	 * @param dest
	 *            目标地址 abc1.jpg
	 * @param tempPath
	 *            中间层目录 /usr/local/nginx/html/ abc.jpg
	 * @throws JSchException
	 */
	public static void uploadFile(String src, String dest) {

		if (session == null) {
			init();
		}
		Channel channel = null;
		try {
			channel = (Channel) session.openChannel("sftp");
			channel.connect(timeout);
			ChannelSftp sftp = (ChannelSftp) channel;

			sftp.put(src, dest);
			sftp.quit();
			sftp.disconnect();

		} catch (Exception e) {
			log.error("SFTPUtil.uploadFile.exception1", e);
		} finally {
			if (channel != null) {
				channel.disconnect();
			}
		}

	}

	/**
	 * 模版 : 使用输入输出流
	 * 
	 * 利用JSch包实现SFTP下载、上传文件
	 * 
	 * @param ip
	 *            主机IP
	 * @param user
	 *            主机登陆用户名
	 * @param psw
	 *            主机登陆密码
	 * @param port
	 *            主机ssh2登陆端口,如果取默认值,传-1
	 */
	@SuppressWarnings("unused")
	private static void sshSftp(String ip, String user, String pass, int port) throws Exception {
		Session session = null;
		Channel channel = null;
		JSch jsch = new JSch();
		if (port <= 0) {
			// 连接服务器,采用默认端口:默认22
			session = jsch.getSession(user, ip);
		} else {
			// 采用指定的端口连接服务器
			session = jsch.getSession(user, ip, port);
		}
		// 如果服务器连接不上,则抛出异常
		if (session == null) {
			throw new Exception("session is null");
		}
		// 设置登陆主机的密码
		session.setPassword(pass);// 设置密码
		// 设置第一次登陆的时候提示,可选值:(ask | yes | no)
		session.setConfig("StrictHostKeyChecking", "no");
		// 设置登陆超时时间
		session.connect(timeout);
		try {
			// 创建sftp通信通道
			channel = (Channel) session.openChannel("sftp");
			channel.connect(1000);
			ChannelSftp sftp = (ChannelSftp) channel;
			// 进入服务器指定的文件夹
			sftp.cd("/usr/local/nginx/html");
			// 列出服务器指定的文件列表
			Vector<?> v = sftp.ls("*");// "*.txt"
			for (int i = 0; i < v.size(); i++) {
				System.out.println(v.get(i));
			}
			// 以下代码实现从本地上传一个文件到服务器,如果要实现下载,对换以下流就可以了
			OutputStream outstream = sftp.put("1117.jpg");
			InputStream instream = new FileInputStream(new File("E:/IMG/7.jpg"));
			byte b[] = new byte[1024];
			int n;
			while ((n = instream.read(b)) != -1) {
				outstream.write(b, 0, n);
			}
			outstream.flush();
			outstream.close();
			instream.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			session.disconnect();
			channel.disconnect();
		}
	}

	public static void main(String[] args) {

		// String src = "E:/kare20.png" ;
		// String dest = "kare.png";
		// uploadFile(src, dest);

		String src = "D:/张三.jpg";
		String dest = "/usr/local/images/advert/999.jpg";
		uploadFile(src, dest);

	}

}
#SFTP相关配置

# 主机IP
sftp.ip=192.168.8.111
# 用户
sftp.user=dev
# 密码
sftp.pass=dev123
# 端口;默认22
sftp.port=22
# 默认路径
sftp.path=/usr/local/nginx/html






java sftp

2020.11.18 21:04

https://www.meihaocloud.com.com/185.html , 欢迎转载,请在文章页标出原文连接 !


Copyright © 2020 千夕网 联系站长

粤公网安备 44030302001408号 粤ICP备19099833号-1