java通过sftp传输文件到指定服务器目录下

工具类如下

package cn.sd2.common.utils;

import java.util.Properties;
import org.springframework.web.multipart.MultipartFile;

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

public class SftpClientUtil {

	/** 主机 */
	private final static String host = "1.1.1.1";
	/** 端口 */
	private final static int port = 22;
	/** 用户名 */
	private final static String username = "account";
	/** 密码 */
	private final static String password = "password";
	/** 目录 */
	private final static String directory = "/upload/file";
	/** url地址 */
	private final static String baseUrl = "https://myurl/static/file/";

	/**
	 * 上传单个文件
	 *
	 * @param directory
	 *            上传的目录
	 * @param uploadFile
	 *            要上传的文件
	 * 
	 * @throws Exception
	 */
	public static String upload(MultipartFile file) throws Exception {
		ChannelSftp sftp = connect();
		sftp.cd(directory);
		sftp.put(file.getInputStream(), file.getOriginalFilename());
		disconnect(sftp);
		return baseUrl + file.getOriginalFilename();
	}

	/**
	 * 删除文件
	 *
	 * @param directory
	 *            要删除文件所在目录
	 * @param deleteFile
	 *            要删除的文件
	 * 
	 * @throws Exception
	 */
	public void delete(String deleteFile) throws Exception {
		ChannelSftp sftp = connect();
		sftp.cd(directory);
		sftp.rm(deleteFile);
		disconnect(sftp);
	}

	/**
	 * 连接sftp服务器
	 * 
	 * @throws Exception
	 */
	public static ChannelSftp connect() throws Exception {

		JSch jsch = new JSch();
		Session sshSession = jsch.getSession(username, host, port);

		sshSession.setPassword(password);
		Properties sshConfig = new Properties();
		sshConfig.put("StrictHostKeyChecking", "no");
		sshSession.setConfig(sshConfig);
		sshSession.connect(20000);

		Channel channel = sshSession.openChannel("sftp");
		channel.connect();

		return (ChannelSftp) channel;
	}

	/**
	 * Disconnect with server
	 * 
	 * @throws Exception
	 */
	public static void disconnect(ChannelSftp sftp) throws Exception {
		if (sftp != null) {
			if (sftp.isConnected()) {
				sftp.disconnect();
			} else if (sftp.isClosed()) {
			}
		}
	}

}

访问url做了nginx和linux软链接配置,看需求自行设置即可

你可能感兴趣的:(后端工作经验笔记)