您的位置:首页 > 编程语言 > Java开发

java 通过ssh连接服务器上传,下载,删除文件

2018-07-08 19:59 218 查看

package troila.web.utils;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

import org.springframework.web.multipart.MultipartFile;

import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.SCPClient;
import ch.ethz.ssh2.SFTPv3Client;
import ch.ethz.ssh2.Session;
import troila.web.model.Conf;

/**
 * ssh上传文件
 * @author liuquanrui
 *
 */
public class SSHUtil {
    
    private static SCPClient scp;
    private static Connection conn;
    
    /**
     *  获取连接conn
     * @ClassName:SSHUtil.java
     * @Description:
     * @author: liuquanrui
     * @date: 2018年7月5日
     */
    public static void getConnect(String serverIp, String username, String password) {
        try {
            conn = new Connection(serverIp);
            conn.connect();
            conn.authenticateWithPassword(username, password);        
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 
     * @Description:获取scp
     * @return
     * @version: v1.1.0
     * @author: liuquanrui
     * @date: 2018年7月5日 下午4:09:01
     */
    public static SCPClient getSCPClient() {
        return scp = new SCPClient(conn);
    }
    
    /**
     * 
     * @Description:获取连接conn 和 scp
     * @version: v1.1.0
     * @author: liuquanrui
     * @date: 2018年7月5日 下午4:11:38
     */
    public static void getConnAndScp() {
        SSHUtil.getConnect(Conf.SSHSERVERIP, Conf.SSHUSERNAME, Conf.SSHPASSWORD);
        scp = getSCPClient();
    }
    /**
     * 
     * @Description:上传文件
     * @param localFile 本地文件目录
     * @param remoteTargetDirectory 远程文件目录
     * @version: v1.1.0
     * @author: liuquanrui
     * @date: 2018年7月5日
     */
    public static boolean upload(byte[] data, String fileName,String remoteTargetDirectory) {
        boolean flag = false;
        try {
            getConnAndScp();
            //ifDirExist();            
            scp.put(data, fileName, remoteTargetDirectory,"0777");
            flag = true;
            conn.close();
        } catch (Exception e) {
            flag = false;
            e.printStackTrace();
        }
        return flag;
    }
    
    /**
     * 
     * @Description:下载文件
     * @param remoteTargetDirectory  远程文件目录
     * @param localDirectory  本地文件目录
     * @version: v1.1.0
     * @author: liuquanrui
     * @date: 2018年7月5日
     */
    public static void download(String remoteTargetDirectory, String localDirectory) {
        try {
            getConnAndScp();
            scp.get(remoteTargetDirectory, localDirectory);
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 
     * @Description:删除文件
     * @param fileName
     * @version: v1.1.0
     * @author: liuquanrui
     * @date: 2018年7月5日
     */
    public static void remove(String fileName) {
        try {
            SSHUtil.getConnect(Conf.SSHSERVERIP, Conf.SSHUSERNAME, Conf.SSHPASSWORD);
            SFTPv3Client sftpClient = new SFTPv3Client(conn);      
            sftpClient.rm(Conf.REMOTETARGETDIR+fileName);
            sftpClient.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 
     * @Description:获得上传文件的本地路径和文件名称
     * @param file
     * @return
     * @version: v1.1.0
     * @author: liuquanrui
     * @date: 2018年7月5日 下午3:04:11
     */
    public static Map<String, String> getAbsolutePath(MultipartFile file) {
        Map<String, String> map = new HashMap<String, String>();
        try {
            //创建临时文件
            File f = File.createTempFile(MakeStringUtils.createId(16), ".jpg");
            //将文件转为file文件
            file.transferTo(f);
            //获取本地路径
            String filePath = f.getAbsolutePath();
            //获取文件名称
            String newFileName = f.getName();
            map.put("filePath", filePath);
            map.put("fileName", newFileName);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return map;
    }
    
    /**
     * File的InputStream 转为byte[]
     * @param in
     * @return
     * @throws IOException
     */
    public static byte[] toByteArray(InputStream in) throws IOException {
        ByteArrayOutputStream out=new ByteArrayOutputStream();
        byte[] bufferValue=new byte[in.available()];
        byte[] buffer=new byte[1024*4];
        int n=0;
        while ( (n=in.read(buffer)) !=-1) {
            out.write(buffer,0,n);
        }
        bufferValue = out.toByteArray();
        out.close();
        return bufferValue;
    }
    
    /**
     * 
     * @Description:创建文件夹
     * @version: v1.1.0
     * @author: liuquanrui
     * @date: 2018年7月6日上午9:27:45
     */
    public static void makeDir() {
        try {
            SSHUtil.getConnect(Conf.SSHSERVERIP, Conf.SSHUSERNAME, Conf.SSHPASSWORD);
            SFTPv3Client sftpClient = new SFTPv3Client(conn); 
            sftpClient.mkdir(Conf.REMOTETARGETDIR, 0777);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 
     * @Description:判断服务器上的存储路径是否存在,不存在则创建
     * @version: v1.1.0
     * @author: liuquanrui
     * @date: 2018年7月6日上午9:54:12
     */
    public static void ifDirExist() {
        try {
            String cmd = "[ -d Conf.REMOTETARGETDIR ]";
            Session session= conn.openSession();//打开一个会话
            session.execCommand(cmd);//执行命令
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    
    public static void main(String[] args) {
        //String xiegang = File.separator;
        //String filePath = "F:\\zaqizaba\\4.jpg";
//        SSHUtil.upload(filePath, Conf.REMOTETARGETDIR);
        //SSHUtil.download(Conf.REMOTETARGETDIR+xiegang+"1.jpg", "F:\\test");
        //SSHUtil.remove("1.jpg");
        
    }
}
 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: