文档章节

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
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
JSch:纯JAVA实现SFTP文件上传和下载

如果你想用纯JAVA实现SFTP文件上传或下载,或者是想纯JAVA连接到SSH2服务器上执行命令,那就使用JSch.jar包吧。这里我们先描述实现SFTP协议的上传和下载,上代码和详细的代码注释: /** 利用...

BLUE-魏晓峰
2013/06/13
0
11

没有更多内容

加载失败,请刷新页面

加载更多

cacti监控安装

cacti是用PHP实现的一个软件,它用snmp服务获取数据,然后用rrdtool存储和更新数据,并生成图表展示。比较适合用于交换机、路由器的网络监控,插件众多,可图示化显示网络状况。 cacti官方推...

hiwill
5分钟前
0
0
shell特殊符号、cut、sort、uniq、wc、tee、tr、split命令

10月15日任务 8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_tr_split命令 8.13 shell特殊符号下 cut 命令 cut作用:截取字符串 用法如下:cat /etc/passwd |head -2 |cut -d ...

hhpuppy
34分钟前
1
0
Springboot实现filter拦截token验证和跨域

背景 web验证授权合法的一般分为下面几种 1使用session作为验证合法用户访问的验证方式 使用自己实现的token 使用OCA标准 在使用API接口授权验证时,token是自定义的方式实现起来不需要引入其...

funnymin
今天
3
0
linux使用ntfs-3g操作ntfs格式硬盘

Linux内核目前只支持对微软NTFS文件系统的读取。 NTFS-3G 是微软 NTFS 文件系统的一个开源实现,同时支持读和写。NTFS-3G 开发者使用 FUSE 文件系统来辅助开发,同时对可移植性有益。 安装 ...

linuxprobe16
今天
1
0
kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
今天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部