精华内容
下载资源
问答
  • sftp文件上传
    2021-03-23 17:40:06

    PHP的sftp文件上传;在框架thinkphp5中使用;

    主要用到的sftp函数如下;

    ssh2_connect(host,port) 链接信息

    ssh2_auth_password($con,username,password)登录验证

    copy();//服务器之间的文件复制;

    要求如下

    需要的文件字段信息见附件内容,注意最后一列带年月日时分秒格式;

    上传前,需要先判断相应目录下是否有上一天日期文件夹,若无,则创建,若有,则直接上传至相应文件夹下,如附件所示

    thinkphp5中提供了一个非composer安装的第三方类库目录extend

    在extend目录下创建一个sftp目录创建sftp.php的类namespace sftp;

    class Sftp

    {

    // 初始配置为NULL

    private $config = NULL;

    // 连接为NULL

    private $conn = NULL;

    //sftp resource

    private $ressftp = NULL;

    // 初始化

    public function __construct($config)

    {

    $this->config = $config;

    $this->connect();

    }

    public function connect()

    {

    $this->conn = ssh2_connect($this->config['host'], $this->config['port']);

    if( ssh2_auth_password($this->conn, $this->config['username'], $this->config['password']))

    {

    $this->ressftp = ssh2_sftp($this->conn);

    }else{

    echo "用户名或密码错误";

    }

    }

    // 下载文件

    public function downftp($remote, $local)

    {

    return copy("ssh2.sftp://{$ressftp}".$remote, $local);

    }

    // 文件上传

    public function upftp( $local,$remote, $file_mode = 0777)

    {

    return copy($local,"ssh2.sftp://{$this->ressftp}".$remote);

    }

    //创建目录

    public function ssh2_sftp_mchkdir($path)  //使用创建目录循环

    {

    ssh2_sftp_mkdir($this->ressftp, $path,0777);

    }

    //判段目录是否存在

    public function ssh2_dir_exits($dir){

    return file_exists("ssh2.sftp://{$this->ressftp}".$dir);

    }

    }

    下面在控制器里面调用namespace app\index\controller;

    use think\Controller;

    use \sftp\sftp;

    class Index extends Controller

    {

    public function index()

    {

    ini_set('max_execution_time','0');//设置永不超时

    $time = date('ymd',time()-24*3600);//上一天的日期

    $name = "mac".$time;

    $data = db('table')->where("add_date='2017-10-09'")->select();//查询数据

    $fp = fopen("$name.csv","a"); //打开csv文件,如果不存在则创建

    $datastr = 'id,sitecode,devmac,stamac,add_date,up_time'."\r\n";

    foreach ($data as $key => $value) {

    # code...

    $datastr = $datastr.$value['id'].$value['sitecode'].','.$value['devmac'].

    ','.$value['stamac'].','.$value['add_date'].','.$value['up_time']."\r\n";

    }

    //iconv('GB2312','UTF-8//IGNORE',$datastr)

    fwrite($fp,$datastr); //写入数据讲gbk转成utf8

    fclose($fp); //关闭文件句柄

    echo "生成成功";

    $config = array(

    'host'=>'127.0.0.1',

    'username'=>'root',

    'password'=>'root',

    'port'=>'22'

    );

    $sftp = new sftp($config);

    $re = $sftp->ssh2_dir_exits("/test/$time");

    if($re){//如果目录存在直接上传

    $sftp->upftp("$name.csv",'/test/'.$time.'/'.$name.'.csv');

    }else{

    $sftp->ssh2_sftp_mchkdir('/test/'.$time);

    $sftp->upftp("$name.csv",'/test/'.$time.'/'.$name.'.csv');

    }

    }

    }

    更多相关内容
  • 本篇文章主要介绍了JAVA SFTP文件上传、下载及批量下载实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
  • 完整的C#代码,Vs2008工程,可编译和测试,利用Renci.SshNet实现了SFTP文件上传和下载,有进度条提示。网上找的一般都是直接下载和上传,不能看到进度信息。
  • SFTP文件上传

    2021-12-17 16:25:15
    SFTP+springboo整合工具类

    所需依赖

    		<dependency>
                <groupId>com.jcraft</groupId>
                <artifactId>jsch</artifactId>
                <version>0.1.49</version>
            </dependency>
    

    配置文件

    #当前服务服务端口号
    server.port=11111
    #上传文件服务器ip地址
    ftp.server.host=192.11.*.*
    #上传文件服务器端口号
    ftp.server.port=22
    #服务器用户名
    ftp.server.username=username
    #服务器密码
    ftp.server.password=password
    

    核心代码

    package com.wanyu.util;
    
    import com.jcraft.jsch.*;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.*;
    import java.util.Arrays;
    import java.util.List;
    import java.util.Properties;
    import java.util.UUID;
    
    /**
     * @author: wy
     * @data: 2021/12/17  11:49
     */
    @Component  //一定要注入ioc容器,否则@Value无法获取配置文件数据
    public class SFtpUtil {
        private   transient Logger log = LoggerFactory.getLogger(SFtpUtil.class);
    
        private  ChannelSftp sftp;
    
        private  Session session;
        /** FTP 登录用户名*/
        @Value("${ftp.server.username}")
        private  String username;
        /** FTP 登录密码*/
        @Value("${ftp.server.password}")
        private  String password;
        /** FTP 服务器地址IP地址*/
        @Value("${ftp.server.host}")
        private  String host;
        /** FTP 端口*/
        @Value("${ftp.server.port}")
        private  int port;
    
        /** 支持的文件类型 */
        private   final List<String> SUFFIXES = Arrays.asList("image/png", "image/jpeg");
    
    
    
        /**
         * 连接sftp服务器
         *
         * @throws Exception
         */
        public  void login(){
            try {
                JSch jsch = new JSch();
    
                log.info("sftp connect by host:{} username:{}",host,username);
    
                session = jsch.getSession(username, host, port);
                log.info("Session is build");
                if (password != null) {
                    session.setPassword(password);
                }
                Properties config = new Properties();
                config.put("StrictHostKeyChecking", "no");
    
                session.setConfig(config);
                session.connect();
                log.info("Session is connected");
    
                Channel channel = session.openChannel("sftp");
                channel.connect();
                log.info("channel is connected");
    
                sftp = (ChannelSftp) channel;
                log.info(String.format("sftp server host:[%s] port:[%s] is connect successfull", host, port));
            } catch (JSchException e) {
                log.error("Cannot connect to specified sftp server : {}:{} \n Exception message is: {}", new Object[]{host, port, e.getMessage()});
            }
        }
    
        /**
         * 关闭连接 server
         */
        public  void logout(){
            if (sftp != null) {
                if (sftp.isConnected()) {
                    sftp.disconnect();
                    log.info("sftp is closed already");
                }
            }
            if (session != null) {
                if (session.isConnected()) {
                    session.disconnect();
                    log.info("sshSession is closed already");
                }
            }
        }
    
        /**
         * 将输入流的数据上传到sftp作为文件
         *
         * @param directory
         *            上传到该目录
         * @param sftpFileName
         *            sftp端文件名
         * @param input
         *            输入流
         * @throws SftpException
         * @throws Exception
         */
        public  void upload(String directory, String sftpFileName, InputStream input) throws SftpException{
            try {
                sftp.cd(directory);
            } catch (SftpException e) {
                log.warn("directory is not exist");
                mkdirs(directory);
                sftp.cd(directory);
            }
            sftp.put(input, sftpFileName);
            log.info("file:{} is upload successful" , sftpFileName);
        }
    
        /**
         * 创建多级目录
         * @param directory
         * @throws SftpException
         */
        public void mkdirs(String directory) throws SftpException {
            String dirs[]=directory.split("/");
            String currentDir="/";
            for (int i=0;i<dirs.length;i++){
                currentDir+=dirs[i];
                try {
                    sftp.cd(currentDir);
                }catch (SftpException e){
                    sftp.mkdir(currentDir);
                    sftp.cd(currentDir);
                }
                if (currentDir.charAt(currentDir.length()-1)!='/'){  
                    currentDir+="/";
                }
            }
        }
    
        /**
         * 上传单个文件
         *
         * @param directory
         *            上传到sftp目录
         * @param uploadFile
         *            要上传的文件,包括路径
         * @throws FileNotFoundException
         * @throws SftpException
         * @throws Exception
         */
        public  void upload(String directory, String uploadFile) throws FileNotFoundException, SftpException{
            File file = new File(uploadFile);
            upload(directory, file.getName(), new FileInputStream(file));
        }
    
    
    
        /**
         * 封装文件上传流程调用方法,后期调用工具类只需调用此方法即可
         * @param file
         * @return
         */
        public  String fileUplod(MultipartFile file,String directory){
            String fileName=null;
            try {
                String type = file.getContentType();
                if (!SUFFIXES.contains(type)) { //限制上传文件类型
                    log.info("上传失败,文件类型不匹配:{}", type);
                    return fileName;
                }
                fileName= UUID.randomUUID()+file.getOriginalFilename(); //防止文件重名,使用UUID加文件原始名称作为新的文件名
    
                System.out.println(fileName);
    
                login();
                InputStream is = file.getInputStream();;
                upload(directory, fileName, is);
                logout();
            } catch (Exception e) {
                e.printStackTrace();
                return fileName;
            }
            return fileName;
        }
    }
    
    

    案例调用

    package com.wanyu.controller;
    
    import com.wanyu.util.FtpUtil;
    import com.wanyu.util.SFtpUtil;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.File;
    import java.io.IOException;
    
    /**
     * @author: wy
     * @data: 2021/12/17  10:45
     */
    @RestController
    public class FtpController {
        @Autowired
        SFtpUtil sFtpUtil;  //必须使用依赖注入,从ioc容器中取对象,否则会出现空指针报错
        @PostMapping("/upload")
        public String upload(MultipartFile file){
            String directory="/home/b/a/y/ss";
            String fileName=sFtpUtil.fileUplod(file,directory);
            if (fileName!=null){
                return fileName;
            }
            return "文件上传失败";
        }
    }
    
    
    展开全文
  • 前面上传过一次,不能编辑了,重新上传...和前面那个相比,代码优化了一下:1)上传和下载完成的时候关闭FileStream(不关闭的话下载完成之后本地操作该文件会提示被占用),2)增加了连续下载多个文件(位于Form2)。
  • sftp文件上传.txt

    2019-12-02 17:27:44
    我们在开发的时候时候经常要做一个文件上传,所以今天就给记录一个自己写的sftp文件上传。如果不懂关注微信公众号 Thintime traveler
  • Java 使用SFTP文件上传

    2021-02-01 22:28:13
    SFTP是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。SFTP 为 SSH的一部份,是一种传输文件到服务器的安全方式。SFTP是使用加密传输认证信息和传输的数据,所以,...

    SFTP是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。SFTP 为 SSH的一部份,是一种传输文件到服务器的安全方式。SFTP是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP(来自百度的解释)
    JSch是Java Secure Channel的缩写。 JSch是一个SSH2的纯Java实现。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到你自己的应用程序。

    ChannelSftp类是JSch实现SFTP核心类,它包含了所有SFTP的方法,如:

    put():      文件上传
    get():      文件下载
    cd():       进入指定目录
    ls():       得到指定目录下的文件列表
    rename():   重命名指定文件或目录
    rm():       删除指定文件
    mkdir():    创建目录
    rmdir():    删除目录
    

    1、先引入jar包

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.2.2</version>
    </dependency>
    

    账号密码类

    public interface SFTPDTO {
        /*FTP登录用户名*/
        public static final String username=xxxx;
        /** FTP登录密码*/
        public static final String password=xxxx;
        /** 私钥*/
        public static final String privateKey = xxxx;
        /** FTP服务器地址IP地址*/
        public static final String host=xxxx;
        /** FTP端口*/
        public static final int port=xxxx;
    }
    

    重要类,里面包含开启连接和关闭连接。

    public class SFTPUtils {
        private ChannelSftp sftp;
        private Session session;
    
        public void login(){
            try {
                JSch jsch = new JSch();
                if (SFTPDTO.privateKey != null) {
                    jsch.addIdentity(SFTPDTO.privateKey);// 设置私钥
                }
                session = jsch.getSession(SFTPDTO.username, SFTPDTO.host, SFTPDTO.port);
    
                if (SFTPDTO.password != null) {
                    session.setPassword(SFTPDTO.password);
                }
    
                Properties config = new Properties();
                config.put("StrictHostKeyChecking", "no");
    
                session.setConfig(config);
                session.connect();
    
                Channel channel = session.openChannel("sftp");
                channel.connect();
    
                sftp = (ChannelSftp) channel;
            } catch (Exception e) {
                log.error("Cannot connect to specified sftp server : {}:{} \n Exception message is: {}", new Object[]{SFTPDTO.host, SFTPDTO.port, e.getMessage()});
            }
        }
    
        /**
         * 关闭连接 server
         */
        public void logout(){
            if (sftp != null) {
                if (sftp.isConnected()) {
                    sftp.disconnect();
                    log.info("sftp is closed already");
                }
            }
            if (session != null) {
                if (session.isConnected()) {
                    session.disconnect();
                    log.info("sshSession is closed already");
                }
            }
        }
    	
    	
    	/**
         * 将输入流的数据上传到sftp作为文件
         * @param directory 上传到该目录
         * @param sftpFileName sftp端文件名
         * @throws SftpException
         * @throws Exception
         */
        public void upload(String directory, String sftpFileName, InputStream input) throws SftpException{
            try {
                sftp.cd(directory);
            } catch (SftpException e) {
                log.warn("directory is not exist");
                sftp.mkdir(directory);
                sftp.cd(directory);
            }
            sftp.put(input, sftpFileName);
            log.info("file:{} is upload successful" , sftpFileName);
        }
    }
    

    测试一下

    public static void main(){
    	SFTPUtils sftp = new SFTPUtils();
        sftp.login();
    
        String audioUrl = courseSection.getAudioUrl();
        String temp[] = audioUrl.split("\\\\");
        String fileName = temp[temp.length - 1];
        InputStream inputStream = FileUtils.urlInputStream(audioUrl);
        sftp.upload("/www/website/haha/audio", fileName, inputStream);//上传
        //拼接最终的url
        String newUrl = "https://static.taobao.com/website/ancai/audio/".concat(fileName);
        sftp.logout();
    }
    

    把url转成流

    public class FileUtils {
        public static InputStream urlInputStream(String fileUrl){
            if(StringUtils.isBlank(fileUrl)){
                return null;
            }
            try {
                URL url = new URL(fileUrl);
                HttpURLConnection conn = (HttpURLConnection)url.openConnection();
                //设置超时间为3秒
                conn.setConnectTimeout(3*1000);
                //防止屏蔽程序抓取而返回403错误
                conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
                //得到输入流
                return conn.getInputStream();
            } catch (Exception e) {
                //打印error
                log.error("fileutils.urlinputstream-获取url流失败:",e.getMessage());
            }
            return null;
        }
    }
    

    实际中,我们使用这个工具类就够用了

    public class SFTPUtils {
    
        private ChannelSftp sftp;
        
        private Session session;
        public void login(){
            try {
                JSch jsch = new JSch();
                if (SFTPDTO.privateKey != null) {
                    jsch.addIdentity(SFTPDTO.privateKey);// 设置私钥
                }
                session = jsch.getSession(SFTPDTO.username, SFTPDTO.host, SFTPDTO.port);
    
                if (SFTPDTO.password != null) {
                    session.setPassword(SFTPDTO.password);
                }
    
                Properties config = new Properties();
                config.put("StrictHostKeyChecking", "no");
    
                session.setConfig(config);
                session.connect();
    
                Channel channel = session.openChannel("sftp");
                channel.connect();
    
                sftp = (ChannelSftp) channel;
            } catch (Exception e) {
                log.error("Cannot connect to specified sftp server : {}:{} \n Exception message is: {}", new Object[]{SFTPDTO.host, SFTPDTO.port, e.getMessage()});
            }
        }
    	
        /**
         * 关闭连接 server
         */
        public void logout(){
            if (sftp != null) {
                if (sftp.isConnected()) {
                    sftp.disconnect();
                    log.info("sftp is closed already");
                }
            }
            if (session != null) {
                if (session.isConnected()) {
                    session.disconnect();
                    log.info("sshSession is closed already");
                }
            }
        }
    
        /**
         * 将输入流的数据上传到sftp作为文件
         * @param directory 上传到该目录
         * @param sftpFileName sftp端文件名
         * @throws SftpException
         * @throws Exception
         */
        public void upload(String directory, String sftpFileName, InputStream input) throws SftpException{
            try {
                sftp.cd(directory);
            } catch (SftpException e) {
                log.warn("directory is not exist");
                sftp.mkdir(directory);
                sftp.cd(directory);
            }
            sftp.put(input, sftpFileName);
            log.info("file:{} is upload successful" , sftpFileName);
        }
    
        /**
         * 上传单个文件
         * @param directory 上传到sftp目录
         * @param uploadFile 要上传的文件,包括路径
         * @throws FileNotFoundException
         * @throws SftpException
         * @throws Exception
         */
        public void upload(String directory, String uploadFile) throws FileNotFoundException, SftpException{
            File file = new File(uploadFile);
            upload(directory, file.getName(), new FileInputStream(file));
        }
    
        /**
         * 将byte[]上传到sftp,作为文件。注意:从String生成byte[]是,要指定字符集。
         * @param directory 上传到sftp目录
         * @param sftpFileName 文件在sftp端的命名
         * @param byteArr 要上传的字节数组
         * @throws SftpException
         * @throws Exception
         */
        public void upload(String directory, String sftpFileName, byte[] byteArr) throws SftpException{
            upload(directory, sftpFileName, new ByteArrayInputStream(byteArr));
        }
    
        /**
         * 将字符串按照指定的字符编码上传到sftp
         * @param directory 上传到sftp目录
         * @param sftpFileName 文件在sftp端的命名
         * @param dataStr 待上传的数据
         * @param charsetName sftp上的文件,按该字符编码保存
         * @throws UnsupportedEncodingException
         * @throws SftpException
         * @throws Exception
         */
        public void upload(String directory, String sftpFileName, String dataStr, String charsetName) throws UnsupportedEncodingException, SftpException{
            upload(directory, sftpFileName, new ByteArrayInputStream(dataStr.getBytes(charsetName)));
        }
    
        /**
         * 下载文件
         * @param directory 下载目录
         * @param downloadFile 下载的文件
         * @param saveFile 存在本地的路径
         * @throws SftpException
         * @throws Exception
         */
        public void download(String directory, String downloadFile, String saveFile) throws SftpException, FileNotFoundException{
            if (directory != null && !"".equals(directory)) {
                sftp.cd(directory);
            }
            File file = new File(saveFile);
            sftp.get(downloadFile, new FileOutputStream(file));
            log.info("file:{} is download successful" , downloadFile);
        }
    
        /**
         * 下载文件
         * @param directory 下载目录
         * @param downloadFile 下载的文件名
         * @return 字节数组
         * @throws SftpException
         * @throws Exception
         */
        public byte[] download(String directory, String downloadFile) throws SftpException, IOException {
            if (directory != null && !"".equals(directory)) {
                sftp.cd(directory);
            }
            InputStream is = sftp.get(downloadFile);
            byte[] fileData = IOUtils.toByteArray(is);
            log.info("file:{} is download successful" , downloadFile);
            return fileData;
        }
    
        /**
         * 删除文件
         * @param directory 要删除文件所在目录
         * @param deleteFile 要删除的文件
         * @throws SftpException
         * @throws Exception
         */
        public void delete(String directory, String deleteFile) throws SftpException{
            sftp.cd(directory);
            sftp.rm(deleteFile);
        }
    
        /**
         * 列出目录下的文件
         * @param directory 要列出的目录
         * @return
         * @throws SftpException
         */
        public Vector<?> listFiles(String directory) throws SftpException {
            return sftp.ls(directory);
        }
    
        /*public static void main(String[] args) throws SftpException, Exception {
            SFTPUtils sftp = new SFTPUtils("xxxx", "xxx", "upload.haha.com", 8888);
            sftp.login();
            InputStream inputStream = getInputStream("http://qiniu.xinxuanhaoke.com/keqianduwu_1.jpg");
            sftp.upload("/www/website/ancai/audio", "123.jpg", inputStream);
            sftp.logout();
        }*/
    }
    

    方式二、使用HuTool的工具类

    先引入jar

    <dependency>
    	<groupId>cn.hutool</groupId>
    	<artifactId>hutool-all</artifactId>
    	<version>5.4.0</version>
    </dependency>
    <dependency>
    	<groupId>com.jcraft</groupId>
    	<artifactId>jsch</artifactId>
    	<version>0.1.53</version>
    </dependency>
    
    public static void main(String[] args) {
        Sftp sftp = JschUtil.createSftp("ip或者域名", 端口, "账号", "密码");
        ChannelSftp client = sftp.getClient();
        String cd = "/www/website/ancai/audio";//要上传的路径
        try {
            sftp.cd(cd);  //进入指定目录
        } catch (Exception e) {
            log.warn("directory is not exist");
            sftp.mkdir(cd);     //创建目录
            sftp.cd(cd);        //进入目录
        }
        InputStream inputStream = urlInputStream("http://audio.xinxuanhaoke.com/50bda079e9ef3673bbaeda20321bf932.mp3");//将文件转成流
        
        client.put(String.valueOf(inputStream), "1.mp3");//开始上传。
    }
    

    本文引自:https://www.cnblogs.com/ceshi2016/p/7519762.html

    展开全文
  • FTP,SFTP文件上传,下载到服务器,ZIP文件压缩,加密,解密,然后再上传到服务器,各种封装操作; 里面包含了帮助类库和测试使用说明,下载即可运行;该代码是本人项目实际运行后的总结,分享给大家;
  • SFTP文件上传与下载-附件资源
  • SFTP文件上传工具类

    2022-04-20 18:38:06
    } /** * 将字符串按照指定的字符编码上传sftp * * @param directory 上传sftp目录 * @param sftpFileName 文件sftp端的命名 * @param dataStr 待上传的数据 * @param charsetName sftp上的文件,按该字符编码...
     <dependency>
                <groupId>com.jcraft</groupId>
                <artifactId>jsch</artifactId>
                <version>0.1.53</version>
            </dependency>
    package com.wit.tsp.member.util;
    
    import com.jcraft.jsch.*;
    import com.wit.tsp.member.config.OneLinkConfig;
    import lombok.extern.slf4j.Slf4j;
    import org.apache.commons.compress.utils.IOUtils;
    import org.springframework.stereotype.Component;
    
    import javax.annotation.PostConstruct;
    import javax.annotation.Resource;
    import java.io.*;
    import java.util.Properties;
    import java.util.Vector;
    
    /**
     * @author hankongbin
     * @date 2022/4/20 11:45
     */
    @Slf4j
    @Component
    public class SftpUtil {
    
        @Resource
        private OneLinkConfig oneLinkConfig;
    
        private static OneLinkConfig.Sftp sftpConfig;
    
        @PostConstruct
        public void init() {
            sftpConfig = oneLinkConfig.getSftp();
    //        ChannelSftp sftp = login();
    //        try {
    //            upload(sftp, String.format(sftpConfig.getDirectory(), "11", "requestId2"), new File("D:\\result.txt"));
    //        } catch (FileNotFoundException e) {
    //            e.printStackTrace();
    //        } catch (SftpException e) {
    //            e.printStackTrace();
    //        }
        }
    
    
        /**
         * 连接sftp服务器
         */
        public ChannelSftp login() {
            String host = sftpConfig.getHost();
            int port = sftpConfig.getPort();
            JSch jsch = new JSch();
            log.info("sftp connect... host:{} port:{}", host, port);
            try {
                Session session = jsch.getSession(sftpConfig.getUsername(), host, port);
                session.setConfig("StrictHostKeyChecking", "no");
                session.setPassword(sftpConfig.getPassword());
                Properties config = new Properties();
                session.setConfig(config);
                session.connect();
                Channel channel = session.openChannel("sftp");
                channel.connect();
                log.info("sftp server host:{}, port:{} is connect successFull!", host, port);
                return (ChannelSftp) channel;
            } catch (JSchException e) {
                log.error("connect failed!host:{}, port:{}", host, port, e);
            }
            return null;
        }
    
        /**
         * 关闭连接 server
         */
        public void logout(ChannelSftp channelSftp) {
            if (channelSftp != null) {
                if (channelSftp.isConnected()) {
                    channelSftp.disconnect();
                    log.info("sftp is closed already");
                }
                try {
                    Session session = channelSftp.getSession();
                    if (session.isConnected()) {
                        session.disconnect();
                        log.info("sshSession is closed already");
                    }
                } catch (JSchException e) {
                    log.info("sftp is closed failed", e);
                }
            }
        }
    
        /**
         * 将输入流的数据上传到sftp作为文件
         *
         * @param directory    上传到该目录
         * @param sftpFileName sftp端文件名
         * @param input        输入流
         * @throws SftpException
         * @throws Exception
         */
        public void upload(ChannelSftp channel, String directory, String sftpFileName, InputStream input) throws SftpException {
            try {
                channel.cd(directory);
            } catch (SftpException e) {
                log.warn("directory is not exist");
                // 创建文件夹
                channel.mkdir(directory);
                channel.cd(directory);
            }
            channel.put(input, sftpFileName);
            log.info("file:{} is upload successful", sftpFileName);
        }
    
    
        /**
         * 上传单个文件
         *
         * @param directory 上传到sftp目录
         * @throws FileNotFoundException
         * @throws SftpException
         */
        public void upload(ChannelSftp channel, String directory, File file) throws FileNotFoundException, SftpException {
            upload(channel, directory, file.getName(), new FileInputStream(file));
        }
    
        /**
         * 将byte[]上传到sftp,作为文件。注意:从String生成byte[]是,要指定字符集。
         *
         * @param directory    上传到sftp目录
         * @param sftpFileName 文件在sftp端的命名
         * @param byteArr      要上传的字节数组
         * @throws SftpException
         */
        public void upload(ChannelSftp channel, String directory, String sftpFileName, byte[] byteArr) throws SftpException {
            upload(channel, directory, sftpFileName, new ByteArrayInputStream(byteArr));
        }
    
        /**
         * 将字符串按照指定的字符编码上传到sftp
         *
         * @param directory    上传到sftp目录
         * @param sftpFileName 文件在sftp端的命名
         * @param dataStr      待上传的数据
         * @param charsetName  sftp上的文件,按该字符编码保存
         * @throws UnsupportedEncodingException
         * @throws SftpException
         */
        public void upload(ChannelSftp channel, String directory, String sftpFileName, String dataStr, String charsetName) throws UnsupportedEncodingException, SftpException {
            upload(channel, directory, sftpFileName, new ByteArrayInputStream(dataStr.getBytes(charsetName)));
        }
    
        /**
         * 下载文件
         *
         * @param directory    下载目录
         * @param downloadFile 下载的文件
         * @param saveFile     存在本地的路径
         * @throws SftpException
         * @throws FileNotFoundException
         */
        public void download(ChannelSftp channel, String directory, String downloadFile, String saveFile) throws SftpException, FileNotFoundException {
            if (directory != null && !"".equals(directory)) {
                channel.cd(directory);
            }
            File file = new File(saveFile);
            channel.get(downloadFile, new FileOutputStream(file));
            log.info("file:{} is download successful", downloadFile);
        }
    
        /**
         * 下载文件
         *
         * @param directory    下载目录
         * @param downloadFile 下载的文件名
         * @return 字节数组
         * @throws SftpException
         * @throws IOException
         */
        public byte[] download(ChannelSftp channel, String directory, String downloadFile) throws SftpException, IOException {
            if (directory != null && !"".equals(directory)) {
                channel.cd(directory);
            }
            InputStream is = channel.get(downloadFile);
            byte[] fileData = IOUtils.toByteArray(is);
            log.info("file:{} is download successful", downloadFile);
            return fileData;
        }
    
        /**
         * 删除文件
         *
         * @param directory  要删除文件所在目录
         * @param deleteFile 要删除的文件
         * @throws SftpException
         */
        public void delete(ChannelSftp channel, String directory, String deleteFile) throws SftpException {
            channel.cd(directory);
            channel.rm(deleteFile);
        }
    
        /**
         * 列出目录下的文件
         *
         * @param directory 要列出的目录
         * @param channel
         * @return
         * @throws SftpException
         */
        public Vector<?> listFiles(ChannelSftp channel, String directory) throws SftpException {
            return channel.ls(directory);
        }
    
    
        /**
         * 判断文件大小
         *
         * @param file 文件
         * @param size 限制大小
         * @param unit 限制单位(B,K,M,G)
         * @return
         */
        public static boolean checkFileSize(File file, int size, String unit) {
            long len = file.length();
            double fileSize = 0;
            if ("B".equals(unit.toUpperCase())) {
                fileSize = (double) len;
            } else if ("K".equals(unit.toUpperCase())) {
                fileSize = (double) len / 1024;
            } else if ("M".equals(unit.toUpperCase())) {
                fileSize = (double) len / 1048576;
            } else if ("G".equals(unit.toUpperCase())) {
                fileSize = (double) len / 1073741824;
            }
            if (fileSize > size) {
                return false;
            }
            return true;
        }
    }
    
    展开全文
  • Spring Boot实现SFTP文件上传下载

    千次阅读 2019-04-25 13:12:41
    Spring Boot实现SFTP文件上传下载 1.实现背景及现实意义 近期由于系统迁移到docker容器,采用Spring Boot 框架实现微服务治理,在此基础上晚间批量文件服务器也由ftp改成sftp,由于之前ftp的实现是采用公具类的...
  • sftp 连接关闭 文件上传
  • sftp文件上传功能实现

    千次阅读 2020-09-21 14:46:58
    方式一: 使用jsch-0.1.53.jar 0>添加jsch-0.1.52.jar依赖 1>创建JSch对象; 2>通过jsch获取session连接;...下载/上传文件; 5>退出登录 代码示例: /** * 类说明 sftp工具类 */ public class PSFTPUtil {
  • 基于qt5、sftp上传文件

    2018-12-05 09:54:00
    基于qt5+mingw+win7,里面包括有封装好的sftp库。参考原作者https://download.csdn.net/download/qq_26360165/10576625并修改。最简单的一个小demo
  • 文章目录1 摘要2 核心 Maven 依赖3 核心代码3.1 核心 SFTP 上传下载工具类3.2 SFTP 附件上传配置3.3 SFTP 附件上传与下载示例4 测试5 推荐参考资料6 本次提交记录 ​ ​ 1 摘要 在项目中附件上传和下载是一个常用的...
  • Sftp文件上传demo

    2016-08-18 18:07:35
    Sftp文件上传demo
  • java sftp文件上传

    2015-11-19 15:16:57
    工作中遇到客户提出的sftp上传,把核心代码给大家
  • FTP和SFTP文件上传.zip

    2021-04-15 08:49:01
    VC++实现的FTP、SFTP、HTTP和TCP文件上传支持域名解析
  • SFTP文件上传、下载

    2021-10-29 16:28:00
    SFTP文件上传、下载 public class SftpUtil { private String downFilePath = ""; // FTP文件下载路径 private String fileEncodein = ""; //文件流格式 private String ftpUrl = ""; private String ...
  • sftp解决上传中文乱码,sftp.setFilenameEncoding("GBK");修改是不起作用的,修改源码后重新导出的jar包。
  • from:... 一、批量上传: #!/bin/bash #SFTP配置信息 ...#待上传文件根目录 SRCDIR=/u02/dab/sftpFiles #FTP目录 DESDIR=/u01/sftpFiles #IP IP=192.168.10.11 #端口 PORT=22022 #获取文件 cd ${SRCD
  • java多例模式下处理Sftp文件上传下载,采用固定密码访问Sftp服务器。
  • 使用Putty中的psftp工具实现bat脚本上传sftp文件,如果需要定时间,可自行使用Windows任务计划程序创建定时任务达到自动上传的效果
  • Linux centos7 Sftp 安装手册 Sftp 安装 基本介绍 sftp是Secure File Transfer Protocol...其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件信息传输子系统,SFTP 本身没有单独
  • FTP与SFTP文件上传Demo

    2016-06-20 23:21:42
    SFTP文件上传;FTP文件上传。动手敲了敲,自己整理的。只为了给那些需要的人
  • uploadFile 要上传文件 */ public boolean upload(String directory, String uploadFile) { try { sftp.cd(directory); File file = new File(uploadFile); FileInputStream fileInputStream =...
  • php sftp文件上传 文件上传

    千次阅读 2021-07-15 15:22:10
    * sftp文件上传 */ /** * Sftp 操作類 * Class Sftp */ class Sftp { /** * 連接對象 * @var false|resource */ private $connection; /** * 操作對象 * @var Sftp */ private $sftp; /** * ip *...
  • 最近使用JSch进行sftp文件上传下载,直接在官网找到样例使用,但在并发情景下并不理想,分析代码

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,841
精华内容 11,136
关键字:

sftp文件上传

友情链接: RBF-adaptive1.zip