JAVA-SFTP上传文件

来源:互联网 发布:淘宝关键词挖掘小助手 编辑:程序博客网 时间:2024/04/30 03:20

话不多说,先上代码。使用guice注入。其他使用自行修改
`
import com.google.inject.Singleton;
import com.jcraft.jsch.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Properties;

/**
* Created by darkangel on 2017/2/23.
*/
@Singleton
public class BMKPSFtpUtil {
private static final Logger log = LoggerFactory.getLogger(BMKPSFtpUtil.class);

private static final String CHARSET = "UTF-8";/** * 打开session通道 * @param ip  主机IP * @param user 主机登陆用户名 * @param psw 主机登陆密码 * @param port 主机ssh2登陆端口,如果取默认值,传-1 * @return */public Session openSession(String ip,int port, String user, String psw){    JSch jsch = new JSch();    Session session = null;    try {        // 采用指定的端口连接服务器        session = jsch.getSession(user, ip, port);        // 如果服务器连接不上,则抛出异常        if (session == null) {            throw new Exception("session is null");        }        // 设置登陆主机的密码        session.setPassword(psw);// 设置密码        // 设置第一次登陆的时候提示,可选值:(ask | yes | no)        Properties config = new Properties();        config.put("StrictHostKeyChecking", "no");        session.setConfig(config); // 为Session对象设置properties        // 设置登陆超时时间        session.setTimeout(30000);        session.connect();    }catch (JSchException ex1){        log.error("sftp 上传失败:jsch创建session失败");    }catch (Exception ex2){        log.error("sftp 上传失败:session为null无法连接");    }    return session;}/** * 获取SFTP管道(sftp) * @param session * @param type  连接类型:TYPE:exec 、 sftp * @return <T> T */public ChannelSftp getChannelSftp(Session session, String type){    ChannelSftp channel = null;    try {        // 创建sftp通信通道        channel = (ChannelSftp) session.openChannel("sftp");        channel.connect();    } catch (NumberFormatException e) {        e.printStackTrace();    } catch (Exception e) {        e.printStackTrace();    }    return channel;}/** * 关闭session,关闭SFTP连接 * @param sftp * @throws Exception */public void closeChannel(Channel sftp, Session session) throws Exception {    if (sftp != null) {        if (sftp.isConnected()) {            sftp.disconnect();        }    }    if (session != null) {        if (session.isConnected()) {            session.disconnect();        }    }}/** * SFTP上传图片方法 上传文件存放目录:根目录/data/images/工程名/yyyyMMdd/ * 备注:为了提高连接可用性,统一在执行批量操作后调用closeChannel关闭连接 * @param channelSftp * @param uploadFile  目标文件名 * @param target   远程目标目录 * @throws Exception */public void upload(ChannelSftp channelSftp,String uploadFile,String target) {    File file = new File(uploadFile);    try {        channelSftp.cd(target); // 切换到指定目录        channelSftp.put(new FileInputStream(file), file.getName());//上传文件    } catch (SftpException ex1) {        log.error("sftp 上传失败:打开远程目录");    }catch (FileNotFoundException ex2){        log.error("sftp 上传失败:文件不存在 ");    }}

}
`

使用

ChannelSftp channel = null; //sftp管道声明        Session session = null;  //session声明        try {            //1.建立sftp连接            session = sftpUtil.openSession(IP,PORT, USERNAME, PASSWORD);            channel = sftpUtil.getChannelSftp(session,"sftp");  //获取管道符            //2.上传原图片到资源服务器临时目录下            File file = new File(PIC_PATH);            sftpUtil.upload(channel,PIC_PATH,TMP_STORE_PATH);            //3.mv到远程正式文件夹            sftpUtil.excCommand(session,"mv -f -u "+TMP_STORE_PATH+file.getName()+" "+STORE_PATH+file.getName());        } catch (Exception e) {            e.printStackTrace();        }finally {            sftpUtil.closeChannel(channel,session);        }        return null;
0 0
原创粉丝点击