文档章节

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

耳东Ed
 耳东Ed
发布于 2017/09/04 15:16
字数 424
阅读 10
收藏 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
海淀
数据库管理员
私信 提问
java之Jsch实现Linux的文件上传与下载

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

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

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

狮子暴走
2014/07/23
0
0
2017-5-3工作总结

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

vomou
2017/05/03
0
2
JSCH会大量使用服务器内存吗?会

java实现一个需求用到了jsch,发现服务器内存会被占满。写了个50进程的jsch-sftp测试连接 put一个文件 ExecutorService fixedThreadPool = Executors.newFixedThreadPool(50);for (int j = ...

just-coding
09/20
0
0
JSch - Java实现的SFTP(文件上传详解篇)

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

七律断舍离
2017/11/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

深入理解Java PriorityQueue

ava中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示。本文从Queue接口函数出发,结合生动的图解,深入浅出地分析PriorityQueue每个操作的具体过程和时间复杂度,将让读者建立对...

java菜分享
28分钟前
4
0
玩手机与做实验

看过这样一个故事:说的是在二十世纪二十年代初的一个深夜,担任英国剑桥大学卡文迪许实验室主任的卢瑟福来实验室检查,发现一位学生还在做实验。卢瑟福就问他:“你上午做什么了?”学生回答...

Bob2100
39分钟前
4
0
Kafka流式处理

Kafka Streams 初识流式处理 什么是数据流 数据流(也叫事件流)是无边界数据集的抽象表示。无边界意味着无限和持续增长。无边界数据集之所以是无限的,是因为随着时间的推移,新记录会不断加...

东都大狼狗
48分钟前
5
0
Mysql主从复制(拓展博客文章扩充知识面)

#不停库不锁表在线主从配置 使用 Xtrabackup 在线对MySQL做主从复制 1.数据量大的话还是建议使用工具例如xtrabackup,mysqldump比较适合操作10G以下的数据备份复制。 2.做业务之前考虑清楚具...

robertt15
52分钟前
3
0
docker快速搭建几个常用的第三方服务

本次和大家分享的内容是使用docker快速搭建工作中常用的第三方的服务,对于有一些互联网背景的公司来说,以下几个服务都是很需要的:redis,rabbit,elasticsearch; 如果想学习Java工程化、...

编程SHA
今天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部