package com.osplat.util;

import java.io.*;

import com.jcraft.jsch.*;import com.osplat.bean.Resultmodel;import org.springframework.web.multipart.MultipartFile;

/** * @Company:wftdlx * @Author: wjf * @Description: linus 文件上传 * @Date: Created in 10:33 2019/2/14 */public class FtpsFileList {

//jar包/*
<dependency>    <groupId>com.jcraft</groupId>    <artifactId>jsch</artifactId>    <version>0.1.49</version></dependency>*/
//测试程序
/*@PostMapping("/uploadImage")@ResponseBodypublic Resultmodel uploadImage(@RequestParam MultipartFile file) {

    if (file==null) {        String msg="上传文件不能为空";        Log.info(msg);        return new Resultmodel(0,"上传失败");    }    Resultmodel resultmodel=null;    try {        resultmodel = FtpsFileList.sshSftp(file);    } catch (Exception e) {        System.out.println("上传失败"+e.getMessage());        return new Resultmodel(0,"上传失败");    }    Object fileName=resultmodel.getData();    return new Resultmodel(0,"上传成功",fileName);}*/
    public static String user = "root";    public static String ip = "111.111.1.11";    public static int port = 22;    public static String psw = "123456";    public static String uploadFileName = UuidUtil.get32UUID();

    /**     * 利用JSch包实现SFTP下载、上传文件(用户名密码方式登陆)     * <p>     * ip   主机IP     * user 主机登陆用户名     * psw  主机登陆密码     * port 主机ssh2登陆端口,如果取默认值(默认值22),传-1     */    public static Resultmodel sshSftp(MultipartFile file) throws Exception {        Log.info("开始用户名密码方式登陆");        Session session = null;        JSch jsch = new JSch();

        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);//设置密码        session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password");        //设置第一次登陆的时候提示,可选值:(ask | yes | no)        session.setConfig("StrictHostKeyChecking", "no");        //设置登陆超时时间        session.connect(2000000);        String allName = uploadFileName + file.getOriginalFilename();        sftp(session, allName, file);//allName  上传文件后重命名        Log.info("sftp成功");        return new Resultmodel(0, "文件上传成功", allName);    }

    private static void sftp(Session session, String uploadFileName, MultipartFile file) throws Exception {

        Channel channel = null;        try {            //创建sftp通信通道            channel = (Channel) session.openChannel("sftp");            channel.connect(1000);            ChannelSftp sftp = (ChannelSftp) channel;

            //进入服务器指定的文件夹            sftp.cd("/home/numa/image");

            //列出服务器指定的文件列表            /*Vector v = sftp.ls("*.txt");            for (int i = 0; i < v.size(); i++) {                System.out.println(v.get(i));            }*/            //以下代码实现从本地上传一个文件到服务器,如果要实现下载,对换以下流就可以了            OutputStream outstream = sftp.put(uploadFileName);//上传文件重名

            //MultipartFile转File            File f = null;            try {                f = File.createTempFile("tmp", null);                file.transferTo(f);            } catch (Exception e) {                e.printStackTrace();            }

            //上传流            InputStream instream = new FileInputStream(f);//上传文件内容            byte b[] = new byte[1024];            int n;            while ((n = instream.read(b)) != -1) {                outstream.write(b, 0, n);            }

            outstream.flush();            outstream.close();            instream.close();        } catch (Exception e) {            e.printStackTrace();            Log.error("文件上传util报错" + e.getMessage());        } finally {            session.disconnect();            channel.disconnect();        }    }

    /**     * 利用JSch包实现SFTP下载、上传文件(秘钥方式登陆)     *     * @param ip         主机IP     * @param user       主机登陆用户名     * @param port       主机ssh2登陆端口,如果取默认值(默认值22),传-1     * @param privateKey 密钥文件路径     * @param passphrase 密钥的密码     */   /* public static void sshSftp2(String ip, String user            , int port, String privateKey, String passphrase) throws Exception {        System.out.println("开始秘钥方式登陆");        Session session = null;

        JSch jsch = new JSch();

        //设置密钥和密码        //支持密钥的方式登陆,只需在jsch.getSession之前设置一下密钥的相关信息就可以了        if (privateKey != null && !"".equals(privateKey)) {            if (passphrase != null && "".equals(passphrase)) {                //设置带口令的密钥                jsch.addIdentity(privateKey, passphrase);            } else {                //设置不带口令的密钥                jsch.addIdentity(privateKey);            }        }

        if (port <= 0) {            //连接服务器,采用默认端口            session = jsch.getSession(user, ip);        } else {            //采用指定的端口连接服务器            session = jsch.getSession(user, ip, port);        }

        //如果服务器连接不上,则抛出异常        if (session == null) {            throw new Exception("session is null");        }

        //设置第一次登陆的时候提示,可选值:(ask | yes | no)        session.setConfig("StrictHostKeyChecking", "no");        //设置登陆超时时间        session.connect(30000);

        sftp(session, "bb.log");        System.out.println("sftp成功");    }*/}

linus jsch上传文件的更多相关文章

  1. jsch上传文件到服务器

    需求就是上传文件到服务器,服务器的存储地址由程序决定然后可以自动创建. 使用第三方:jsch JSch 是SSH2的一个纯Java实现.它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文 ...

  2. jsch上传文件功能

    转载:http://www.cnblogs.com/longyg/archive/2012/06/25/2556576.html JSch是Java Secure Channel的缩写.JSch是一个 ...

  3. java使用JSCH连接FTP(Linux服务器)上传文件到Linux服务器

    首先需要用到jsch-0.1.54.jar 包: 链接: https://pan.baidu.com/s/1kZR6MqwpCYht9Pp_D6NKQw 密码: gywx 直接上代码: package ...

  4. 使用SFTP上传文件到服务器的简单使用

    最近用到SFTP上传文件查找了一些资料后自己做了一点总结,方便以后的查询 /** * 将文件上传到服务器 * * @param filePath * 文件路径 * @param channelSftp ...

  5. 用sftp上传文件至linux服务器

    1.项目环境 框架:springmvc    项目管理工具:maven 2.必须使用的jar com.jcraft jsch 0.1.27 test 3.新建一个FileUpDown工具类,在类中添加 ...

  6. Java实现上传文件到指定服务器指定目录

    前言需求 使用freemarker生成的静态文件,统一存储在某个服务器上.本来一开始打算使用ftp实现的,奈何老连接不上,改用jsch.毕竟有现成的就很舒服,在此介绍给大家. 具体实现 引入的pom ...

  7. 上传文件到服务器指定位置 & 从服务器指定位置下载文件

    需要的jar包: 去maven仓库自己搜索com.jcraft下载jar包 <dependency> <groupId>com.jcraft</groupId> & ...

  8. Java上传文件至SFTP服务器

    Windows搭建SFTP服务器 https://www.cnblogs.com/wangjunguang/p/9453611.html 注意点: 1.以管理员权限运行FreeSSHd 2.如果无法启 ...

  9. IE8/9 JQuery.Ajax 上传文件无效

    IE8/9 JQuery.Ajax 上传文件有两个限制: 使用 JQuery.Ajax 无法上传文件(因为无法使用 FormData,FormData 是 HTML5 的一个特性,IE8/9 不支持) ...

随机推荐

  1. web前端基本开发手册

    --------------------------------- 一.概况 1.1  WEB 标准 二.实现WEB标准 2.1  XHTML.CSS介绍 2.2  XHTML书写规范 2.2.1 X ...

  2. java与xml转换 -- XStreamAlias

    @XStreamAlias 1.特点 简化的API; 无映射文件; 高性能,低内存占用; 整洁的XML; 不需要修改对象;支持内部私有字段,不需要setter/getter方法 提供序列化接口; 自定 ...

  3. Java各个版本的新特性

    原链接:http://blog.csdn.net/shareus/article/details/50736159 1.5 1.自动装箱与拆箱: 2.枚举(常用来设计单例模式) http://www. ...

  4. checked选择器实现tab切换

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  5. java中 BeanUtils.copyProperties的用法

    BeanUtils提供了对java发射和自省API的包装,这里对BeanUtils.copyProperties的用法做一个小小的介绍. 通过函数名可以知道,copyProperties函数是对属性进 ...

  6. javascript创建节点的事件绑定

    javascript创建节点的事件绑定 timeupdate事件是<video>中用来返回视频播放进度的事件,绑定在<video>标签返回视频播放位置(每秒计). 现video ...

  7. 【386】operator 的 itemgetter、slice、and_、or_

    itemgetter 用来获取数组中指定索引的元素 from operator import itemgetter itemgetter(1, 3, 5)('ABCDEFG') output: ('B ...

  8. MySQL系统变量配置基础

    本文出处:http://www.cnblogs.com/wy123/p/6595556.html MySQL变量的概念 个人认为可以理解成MySQL在启动或者运行过程中读取的一些参数问题,利用这些参数 ...

  9. python抽象方法

    1.抽象方法的概念 之前我们定义一个基类的时候,如果要求子类必须重写父类中的某一个方法,可以这样做: 定义一个名为Pizza的基类,让其get_radius方法必须被子类继承 class Pizza( ...

  10. asp.net中的reportview报错跟预编有关系

    当报表控件出现: 报表定义无效.详细信息:根级别上的数据无效.行1,位置1. 先检查一下,你的aspx文件是不是变成了这样一句话 这是预编译工具生成的标记文件,不应被删除! 如果这样的话,报表控件是不 ...