文档章节

java通过jsch实现网络文件上传

耳东Ed
 耳东Ed
发布于 2017/09/04 15:16
字数 424
阅读 14
收藏 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();
            }
        }
    }
}

© 著作权归作者所有

耳东Ed
粉丝 0
博文 4
码字总数 1176
作品 0
海淀
数据库管理员
私信 提问
加载中

评论(0)

java之Jsch实现Linux的文件上传与下载

  一、JSch是Java Secure Channel的缩写。JSch是一个SSH2的纯Java实现。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到你自己的应...

小不点丶
2018/01/09
0
0
JSch - Java实现的SFTP(文件上传详解篇) 转

JSch是Java Secure Channel的缩写。JSch是一个SSH2的纯Java实现。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到你自己的应用程序。...

狮子暴走
2014/07/23
388
0
DBHelper--Java JDBC SSH 连接数据库工具类

概述 JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库。 -------------------------------------------------------淫荡的分割线...

osc_ryjlu6z2
2018/07/15
14
0
2017-5-3工作总结

5月3日 上午:学习jsch的使用、并利用它使用各种git命令。学习java操作ftp,并向ftp提交内容: 1、发现jgit可以直接操作git、而jsch也可以用来操作文件传输。尝试修改之前的方案,使用jgit代...

vomou
2017/05/03
2
2
Java使用jsch远程连接ssh

概念:JSch是SSH2的纯Java实现。JSch允许连接到sshd服务器并使用端口转发,X11转发,文件传输等,并且可以将其功能集成到您自己的Java程序中。 说白了就是以java的方式通过jsch连接,来对服务...

osc_81544g47
2019/11/15
17
0

没有更多内容

加载失败,请刷新页面

加载更多

好的可视化编辑器收集

国内 https://www.ivx.cn/index 国外 https://vectr.com http://carto.com https://vx-demo.now.sh/

lilugirl
55分钟前
15
0
怎么在分享流程图的时候设置密码?迅捷画图教你保密小技巧!

怎么在分享流程图的时候设置密码?相信大家对分享链接和密码已经不陌生了,毕竟现在分享资源主要用的网盘、网站等等,基本上都需要先获取密码,才能进入分享链接页面,从分享资源的角度来说,...

赛利亚大姐大
55分钟前
13
0
如何在Mac电脑中输入多种标点符号和文字表情

特殊的标点符号和表情怎么输入?MAC电脑有自己自带的输入法,但是对于一些表情符号很多人都不知道在哪里使用,现在就来介绍一下MAC如何输入多种标点符号和文字表情。 1、首先我们打开备忘录,...

mac小叮当
今天
17
0
Ubuntu替换国内源

网络环境的原因,官方的apt的源的速度比较慢,打算替换为国内源,正好学校有Ubuntu的源,所以替换下 编辑文件/etc/apt/sources.list 将其中的内容换为对应的系统的目标源即可。 选择你的ubu...

zhangwenwen
今天
14
0
持续交付的最后一英里

如果开发人员的变更集在集成时并没有实现长期部署就绪的状态,那么你的团队其实就没有真正的实践持续交付。 想要完全优化产品开发周期,你需要在团队中强调无缝部署的重要性,使每位工程师都...

京东智联云开发者
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部