java通过jsch实现网络文件上传
博客专区 > 耳东Ed 的博客 > 博客详情
java通过jsch实现网络文件上传
耳东Ed 发表于5个月前
java通过jsch实现网络文件上传
  • 发表于 5个月前
  • 阅读 8
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】如何购买服务器最划算?>>>   

package com.ed.util;

import com.jcraft.jsch.*;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * SFTP工具类
 * 依赖包:jsch,官网地址:http://www.jcraft.com/jsch/
 */
public  class FTPClientUtils {
    /**
     * 文件上传
     *
     * @param ip ip地址
     * @param user 用户名
     * @param psw 密码
     * @param port 端口号
     * @param fileName 文件名称
     * @param sPath 文件路径
     * @param dPath ftp服务器目录
     */
    public static void sshSftp(String ip, String user, String psw, int port,
                               String fileName,String sPath, String dPath) {
        Session session = null;
        JSch jsch = new JSch();
        try {
            if (port <= 0) {
                // 连接服务器,采用默认端口
                session = jsch.getSession(user, ip);
            } else {
                // 采用指定的端口连接服务器
                session = jsch.getSession(user, ip, port);
            }
            // 如果服务器连接不上,则抛出异常
            if (session == null) {
                throw new Exception("session is null");
            }
            // 设置登陆主机的密码
            session.setPassword(psw);// 设置密码
            // 设置第一次登陆的时候提示,可选值:(ask | yes | no)
            session.setConfig("StrictHostKeyChecking", "no");
            // 设置登陆超时时间
            session.connect(300000);
            upLoadFile(session, fileName,sPath, dPath);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     *
     * @param session
     * @param fileName 文件名称
     * @param sPath 网络文件路径
     * @param dPath ftp服务器路径
     */
    public static void upLoadFile(Session session, String fileName, String sPath, String dPath) {

        Channel channel = null;
        try {
            channel = (Channel) session.openChannel("sftp");
            channel.connect(10000000);
            ChannelSftp sftp = (ChannelSftp) channel;
            try {
                sftp.cd(dPath);
            } catch (SftpException e) {
                sftp.mkdir(dPath);
                sftp.cd(dPath);
            }
            try {
                URL url = new URL(sPath);
                // 利用HttpURLConnection对象,我们可以从网络中获取网页数据.
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setDoInput(true);
                conn.connect();
                // 得到网络返回的输入流
                InputStream input = conn.getInputStream();
                copyFile(sftp, fileName,input, sftp.pwd());
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.disconnect();
            channel.disconnect();
        }
    }

    public static void copyFile(ChannelSftp sftp, String fileName,InputStream input, String pwd) {
        try {
            sftp.cd(pwd);
        } catch (SftpException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        InputStream instream = input;
        OutputStream outstream = null;
        try {
            outstream = sftp.put(fileName);
            byte b[] = new byte[1024];
            int n;
            try {
                while ((n = instream.read(b)) != -1) {
                    outstream.write(b, 0, n);
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (SftpException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }  finally {
            try {
                outstream.flush();
                outstream.close();
                instream.close();
            } catch (Exception e2) {
                // TODO: handle exception
                e2.printStackTrace();
            }
        }
    }
}
标签: java sftp ssh
共有 人打赏支持
粉丝 0
博文 3
码字总数 1176
×
耳东Ed
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: