精华内容
下载资源
问答
  • JavaSFTP上传文件

    2018-08-03 15:47:12
    Java 操作SFTP上传文件下载案例,很值得看的,Java 操作SFTP上传文件下载案例,很值得看的。
  • c# .net sftp上传文件

    2017-07-27 12:19:07
    c# .net sftp上传文件
  • sftp上传文件

    2020-06-08 17:13:10
    今天,在工作中,写一点关于sftp上传文件的代码,主要分为连接、上传、断开3个步骤,其代码如下: /** * sftp连接 * *@authorfengbo 20140226 */ public void connect(String username, String host, int port...

    今天,在工作中,写一点关于sftp上传文件的代码,主要分为连接、上传、断开3个步骤,其代码如下:

    /**
      * sftp连接
      *
      * @author fengbo 20140226
      */

    public void connect(String username, String host, int port, String password) {
      try {
       if (sftp != null) {
        log.info("sftp is not null");
       }
       JSch jsch = new JSch();
       jsch.getSession(username, host, port);
       Session sshSession = jsch.getSession(username, host, port);
       log.info("Session created.");
       sshSession.setPassword(password);
       Properties sshConfig = new Properties();
       sshConfig.put("StrictHostKeyChecking", "no");
       sshSession.setConfig(sshConfig);
       sshSession.connect();
       log.info("Session connected.");
       log.info("Opening Channel.");
       Channel channel = sshSession.openChannel("sftp");
       channel.connect();
       sftp = (ChannelSftp) channel;
       log.info("Connected to " + host + ".");
      } catch (Exception e) {
       throw new SystemException("连接:["+host+"]ftp服务器异常");
      }
     }

     

    /**
      * sftp断开连接
      *
      * @author fengbo 20140226
      */
     public void disconnect() {
      if (this.sftp != null) {
       if (this.sftp.isConnected()) {
        this.sftp.disconnect();
       } else if (this.sftp.isClosed()) {
        System.out.println("sftp is closed already");
       }
      }
     }

     

    /**
      * 上传文件 流 本地文件路径 remotePath 服务器路径
      *
      * @author fengbo 20140226
      */
     public void upload(File file, String remotName, String remotePath) {
      try {
       // File file = new File(localPath);

       if (file.isFile()) {
        // System.out.println("localFile : " + file.getAbsolutePath());
        String rpath = remotePath; // 服务器需要创建的路径
        try {
         createDir(rpath, sftp);
        } catch (Exception e) {
         throw new SystemException("创建路径失败:" + rpath);
        }

        // this.sftp.rm(file.getName());
        sftp.cd(remotePath);
        this.sftp.put(new FileInputStream(file), remotName);
       }
      } catch (FileNotFoundException e) {
       throw new SystemException("上传文件没有找到");
      } catch (SftpException e) {
       throw new SystemException("上传ftp服务器错误");
      }

     }

    /**
      * 创建一个文件目录
      *
      * @param rfilepath
      * @param sftp
      * @author fengbo 20140226
      */
     public void createDir(String createpath, ChannelSftp sftp) {
      try {
       if (isDirExist(createpath)) {
        this.sftp.cd(createpath);
       }
       String pathArry[] = createpath.split("/");
       StringBuffer filePath = new StringBuffer("/");
       for (String path : pathArry) {
        if (path.equals("")) {
         continue;
        }
        filePath.append(path + "/");
        if (isDirExist(filePath.toString())) {
         sftp.cd(filePath.toString());
        } else {
         // 建立目录
         sftp.mkdir(filePath.toString());
         // 进入并设置为当前目录
         sftp.cd(filePath.toString());
        }

       }
       this.sftp.cd(createpath);
      } catch (SftpException e) {
       throw new SystemException("创建路径错误:" + createpath);

      }
     }

     public boolean isDirExist(String directory) {
      boolean isDirExistFlag = false;
      try {
       SftpATTRS sftpATTRS = sftp.lstat(directory);
       isDirExistFlag = true;
       return sftpATTRS.isDir();
      } catch (Exception e) {
       if (e.getMessage().toLowerCase().equals("no such file")) {
        isDirExistFlag = false;
       }
      }
      return isDirExistFlag;
     }

     

    对应的jar包

    展开全文
  • xshell下利用SFTP传输文件

    万次阅读 2015-09-06 09:27:29
    SFTP是基于SSH的文件传输协议,与ZMODEM相比具有更加安全且更为快速的文件传输功能。 如何利用SFTP接收文件: 1.在本地提示以sftp命令登陆拟要接收文件的主机。 Xshell:\> sftp hostname 2.在sftp提示下以get命令接收...

    SFTP是基于SSH的文件传输协议,与ZMODEM相比具有更加安全且更为快速的文件传输功能。

    如何利用SFTP接收文件:

    1.    在本地提示以sftp命令登陆拟要接收文件的主机。
    Xshell:\> sftp hostname

    2.    在sftp提示下以get命令接收需要的文件。
    sftp:/home/user21>get filename

    3.    在sftp提示下以get命令下载目录

    使用 -r 参数并在目录后加上字符 .

    sftp:/home/user21>get -r /opt/testdir/.

    可使用lcd 更改到本地目录

    如何利用SFTP发送文件:

    1.    在本地提示下以sftp命令登陆拟要发送文件的主机。
    Xshell:\> sftp hostname

    2.    在sftp提示下以put命令发送需要的文件。
    sftp:/home/user21>put filename

    展开全文
  • 验证SFTP文件上传 前言 在公司开发的一个项目中需要使用到ftp来上传文件,一开始直接使用的是vsftp来实现文件的上传,后来领导要求使用sftp来实现文件的上传,然后就有了这篇SFTP实现文件上传的博客文章了。 1....

    前言

    在公司开发的一个项目中需要使用到ftp来上传文件,一开始直接使用的是vsftp来实现文件的上传,后来领导要求使用sftp来实现文件的上传,然后就有了这篇SFTP实现文件上传的博客文章了。

    1.相关依赖

    <dependencies>
    
            <!-- 引入swagger2依赖 -->
            
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>2.6.1</version>
            </dependency>
    
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>2.6.1</version>
            </dependency>
    
            <!-- 引入sftp的依赖 -->
            
            <dependency>
                <groupId>com.jcraft</groupId>
                <artifactId>jsch</artifactId>
                <version>0.1.54</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    

    2.相关配置

    以下是application.yml中的配置

    server:
      port: 8388
    
    sftp:
      # 端口
      port: 22
      # 服务器地址
      host: 10.10.120.71
      # 账号
      userName: taxctrl
      # 密码
      password: taxctrl
      # 文件存储的根路径
      basePath: /home/taxctrl/test
      # session连接超时时间
      sessionConnectTimeout: 30000
      # channel连接超时时间
      channelConnectedTimeout: 30000
      # 协议
      protocol: sftp
    

    3.注入配置文件

    package com.sftp.demo.config;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    /**
     * @author linzf
     * @since 2019/10/8
     * 类描述:
     */
    @Component
    public class SFtpConfig {
    
        /**
         * IP
         */
        @Value("${sftp.host}")
        private String host;
    
        /**
         * 账号
         */
        @Value("${sftp.userName}")
        private String userName;
    
        /**
         * 密码
         */
        @Value("${sftp.password}")
        private String password;
    
        /**
         * 基础路径
         */
        @Value("${sftp.basePath}")
        private String basePath;
    
        /**
         * 协议
         */
        @Value("${sftp.protocol}")
        private String protocol;
    
        /**
         * 端口
         */
        @Value("${sftp.port}")
        private Integer port;
    
        /**
         * session连接超时时间
         */
        @Value("${sftp.sessionConnectTimeout}")
        private Integer sessionConnectTimeout;
    
        /**
         * channel连接超时时间
         */
        @Value("${sftp.channelConnectedTimeout}")
        private Integer channelConnectedTimeout;
    
        public String getHost() {
            return host;
        }
    
        public void setHost(String host) {
            this.host = host;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getBasePath() {
            return basePath;
        }
    
        public void setBasePath(String basePath) {
            this.basePath = basePath;
        }
    
        public String getProtocol() {
            return protocol;
        }
    
        public void setProtocol(String protocol) {
            this.protocol = protocol;
        }
    
        public Integer getPort() {
            return port;
        }
    
        public void setPort(Integer port) {
            this.port = port;
        }
    
        public Integer getSessionConnectTimeout() {
            return sessionConnectTimeout;
        }
    
        public void setSessionConnectTimeout(Integer sessionConnectTimeout) {
            this.sessionConnectTimeout = sessionConnectTimeout;
        }
    
        public Integer getChannelConnectedTimeout() {
            return channelConnectedTimeout;
        }
    
        public void setChannelConnectedTimeout(Integer channelConnectedTimeout) {
            this.channelConnectedTimeout = channelConnectedTimeout;
        }
    }
    
    

    4.开启swagger2配置

    package com.sftp.demo.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.RestController;
    import springfox.documentation.builders.ApiInfoBuilder;
    import springfox.documentation.service.ApiInfo;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;
    
    /**
     * @author linzf
     * @since 2019-10-08
     * 类描述:sftp测试专用类
     */
    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
    
        @Bean
        public Docket createRestApi() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .useDefaultResponseMessages(false)
                    .select()
                    .apis((input) -> {
                        Class<?> declaringClass = input.declaringClass();
                        if (declaringClass.isAnnotationPresent(RestController.class)) {
                            return true;
                        }
                        if (input.isAnnotatedWith(ResponseBody.class)) {
                            return true;
                        }
                        return false;
                    })
                    .build();
        }
    
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    //大标题
                    .title("sftp接口测试页面!")
                    //版本
                    .version("1.0")
                    .build();
        }
    
    }
    
    

    5.封装工具类

    package com.sftp.demo.util;
    
    import com.jcraft.jsch.*;
    import com.sftp.demo.config.SFtpConfig;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.io.InputStream;
    import java.util.Arrays;
    
    /**
     * @author linzf
     * @since 2019/10/8
     * 类描述:这是一个sftp的工具类
     */
    public class SFtpUtil {
    
        /**
         * 初始化日志对象
         */
        private static Logger log = LoggerFactory.getLogger(SFtpUtil.class);
    
        /**
         * 功能描述: 实现文件上传
         *
         * @param fileDir     文件所在的路径
         * @param fileName    文件的名称
         * @param inputStream 文件流
         * @param sFtpConfig  文件相关的配置信息
         * @return 返回上传结果
         * @throws Exception
         */
        public static boolean uploadFile(String fileDir, String fileName, InputStream inputStream, SFtpConfig sFtpConfig) throws Exception {
            ChannelSftp sftp = getSftp(sFtpConfig);
            try {
                fileDir = sFtpConfig.getBasePath() + fileDir;
                boolean dirs = createDirs(fileDir, sftp);
                if (!dirs) {
                    log.info("创建文件目录失败!");
                    return false;
                }
                sftp.put(inputStream, fileName);
                return true;
            } catch (Exception e) {
                log.info("文件上传失败:{}", e.getMessage());
                return false;
            } finally {
                disconnect(sftp);
            }
        }
    
        /**
         * 功能描述: 创建文件夹
         *
         * @param dirPath 需要创建文件夹的路径
         * @param sftp    sftp对象
         * @return 返回创建的结果
         */
        private static boolean createDirs(String dirPath, ChannelSftp sftp) {
            if (dirPath != null && !dirPath.isEmpty() && sftp != null) {
                String[] dirs = Arrays.stream(dirPath.split("/"))
                        .filter(a -> a != null && !a.equals(""))
                        .toArray(String[]::new);
                for (String dir : dirs) {
                    try {
                        sftp.cd(dir);
                        log.info("进入的目录是 {}", dir);
                    } catch (Exception e) {
                        try {
                            sftp.mkdir(dir);
                            log.info("创建的目录是 {}", dir);
                        } catch (SftpException e1) {
                            log.error("创建失败的目录是:{}", dir, e1);
                            e1.printStackTrace();
                        }
                        try {
                            sftp.cd(dir);
                            log.info("进入的目录是 {}", dir);
                        } catch (SftpException e1) {
                            log.error("进入失败的目录是:{}", dir, e1);
                            e1.printStackTrace();
                        }
                    }
                }
                return true;
            }
            return false;
        }
    
    
        /**
         * 功能描述: 创建sftp连接
         *
         * @param sFtpConfig sftp连接对象
         * @return 返回 sftp通道对象
         * @throws Exception
         */
        private static ChannelSftp getSftp(SFtpConfig sFtpConfig) throws JSchException {
            JSch jsch = new JSch();
            Session session = getSession(jsch, sFtpConfig.getHost(), sFtpConfig.getUserName(), sFtpConfig.getPort());
            session.setPassword(sFtpConfig.getPassword());
            session.connect(sFtpConfig.getSessionConnectTimeout());
            Channel channel = session.openChannel(sFtpConfig.getProtocol());
            channel.connect(sFtpConfig.getChannelConnectedTimeout());
            return (ChannelSftp) channel;
        }
    
        /**
         * 创建session
         *
         * @param jsch     jsch对象
         * @param host     sftpIP地址
         * @param username sftp账号
         * @param port     sftp端口
         * @return 返回 session对象
         * @throws Exception
         */
        private static Session getSession(JSch jsch, String host, String username, Integer port) throws JSchException {
            Session session;
            if (port <= 0) {
                session = jsch.getSession(username, host);
            } else {
                session = jsch.getSession(username, host, port);
            }
            if (session == null) {
                return null;
            }
            session.setConfig("StrictHostKeyChecking", "no");
            return session;
        }
    
        /**
         * 功能描述: 关闭连接
         *
         * @param sftp sftp对象
         */
        private static void disconnect(ChannelSftp sftp) {
            try {
                if (sftp != null) {
                    if (sftp.isConnected()) {
                        sftp.disconnect();
                    } else if (sftp.isClosed()) {
                        log.info("sftp已经关闭");
                    }
                    if (null != sftp.getSession()) {
                        sftp.getSession().disconnect();
                    }
                }
            } catch (JSchException e) {
                e.printStackTrace();
            }
        }
    
    
    }
    
    

    6.编写上传文件的验证方法

    package com.sftp.demo.controller;
    
    import com.sftp.demo.config.SFtpConfig;
    import com.sftp.demo.util.SFtpUtil;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    /**
     * @author linzf
     * @since 2019/10/8
     * 类描述: 测试文件上传
     */
    @RestController
    @RequestMapping("sftp")
    public class SFtpController {
    
        @Autowired
        private SFtpConfig sFtpConfig;
    
        /**
         * 功能描述: 实现文件上传
         * @param file
         * @return
         */
        @PostMapping("uploadFile")
        public String uploadFile(@RequestParam("file") MultipartFile file) throws Exception {
            SFtpUtil.uploadFile("",file.getOriginalFilename(),file.getInputStream(),sFtpConfig);
            return "success";
        }
    
    }
    
    

    7.验证SFTP文件上传

    最后我们启动我们的程序然后访问:http://127.0.0.1:8388/swagger-ui.html#!/s-ftp-controller/uploadFileUsingPOST
    在这里插入图片描述
    选择好文件以后点击Try it out来实现文件的上传,这时候我们可以直接到我们的服务器去查看我们上传的文件。
    源代码的地址:https://github.com/lazyboyl/sftp-demo.git

    展开全文
  • NodeJS sftp 上传文件

    2020-09-22 15:49:06
    1. 使用 ssh2-sftp-client 上传文件sftp npm i ssh2-sftp-client -s 2. 核心代码: // SftpTool const Client = require('ssh2-sftp-client'); /** * sftp tool */ class SftpTool { /** * {host: ip, ...

    1. 使用 ssh2-sftp-client 上传文件到 sftp

    npm i ssh2-sftp-client -s

    2. 核心代码:

    // SftpTool 
    const Client = require('ssh2-sftp-client');
    /**
     * sftp tool
     */
    class SftpTool {
    
      /**
       * {host: ip, port: 22, username: name, password: pwd}
       * @param {Object} config
       */
      constructor(config) {
        this.config = config;
      }
    
      /**
       * upload data
       * @param {object} data filePath | buffer | readable stream
       * @param {sring} remotePath 
       */
      uploadData(data, remotePath) {
        return new Promise((resolve, reject) => {
          const sftp = new Client();
          sftp.connect(this.config)
            .then(() => sftp.put(data, remotePath))
            .then(() => {
              sftp.end();
              console.log(`upload ${remotePath} success`);
              resolve();
            }).catch(err => {
              sftp.end();
              console.log(`upload ${remotePath} fail`);
              reject(err);
            })
        });
      }
    
      /**
       * upload local file
       * @param {string} filePath local file path
       * @param {string} remotePath 
       */
      uploadFile(filePath, remotePath) {
        return new Promise((resolve, reject) => {
          const sftp = new Client();
          sftp.connect(this.config)
            .then(() => sftp.fastPut(filePath, remotePath))
            .then(() => {
              sftp.end();
              console.log(`upload ${remotePath} success`);
              resolve();
            }).catch(err => {
              sftp.end();
              console.log(`upload ${remotePath} fail`);
              reject(err);
            })
        });
      }
    }
    module.exports = SftpTool;
    
    // SftpTool test
    const SftpTool = require('./sftp');
    const config = {
      host: 'your ip',
      port: '22', // default 22
      username: 'sftp name',
      password: 'sftp password'
    };
    const sftp = new SftpTool(config);
    sftp.uploadData(Buffer.from('test sftp upload'), '/buffer-test.txt');
    sftp.uploadFile('./upload-file.txt', '/upload-file.txt');
    

    3. 同步写法

    // async test
    const Client = require('ssh2-sftp-client');
    const sftpTest = new Client();
    const config = {
      host: 'your ip',
      port: '22',
      username: 'test',
      password: 'test'
    };
    async function test() {
      try {
        await sftpTest.connect(config);
        await sftpTest.put(Buffer.from('async test'), '/async.txt');
        await sftpTest.end();
        console.log('upload success');
      } catch (err) {
        sftpTest.end();
        console.error(err);
      }
    }
    test();
    

    4. 其他, windows 上安装 sftp 服务

    参考

    展开全文
  • sftp传输文件安全吗We’ve previously written about hosting your own FTP server, but data is transferred in cleartext, making it unsuitable for confidential file transfers. In this guide we’ll go over ...
  • mac下好用的sftp传输文件FileZilla
  • php sftp文件上传 文件上传

    千次阅读 2021-07-15 15:22:10
    * sftp文件上传 */ /** * Sftp 操作類 * Class Sftp */ class Sftp { /** * 連接對象 * @var false|resource */ private $connection; /** * 操作對象 * @var Sftp */ private $sftp; /** * ip *...
  • 主要介绍了java使用SFTP上传文件到资源服务器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • SFTP上传文件详解

    万次阅读 2016-06-21 09:27:51
    JSch是Java Secure Channel的缩写。JSch是一个SSH2的纯Java实现。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发... SFTP是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供
  • sftp安全文件传输

    2014-08-29 17:53:21
    sftp 用于替代FTP传输,安全传输工具
  • Sftp文件上传demo

    2016-08-18 18:07:35
    Sftp文件上传demo
  • 背景:从Windows系统向类unix系统传送文件,使用Windows系统自带的SFTP命令进行文件传送(不用下载F开头,X开头的ftp工具) =================================背景分割线=============================== 上干货:1...
  • 树莓派上使用SFTP管理文件

    千次阅读 2014-09-21 10:57:16
    SFTP(SSH文件传输协议)是一种网络协议,提供了基于SSH协议的文件访问、文件传输和文件管理方法。 通过使用SFTP,你可以很容易修改、浏览以及编辑树莓派上的文件SFTP比起FTP更容易配置,因为Raspbian默认已经...
  • 使用SFTP传输文件

    千次阅读 2017-12-05 16:22:21
    参看:https://www.cnblogs.com/longyg/archive/2012/06/25/2561332.html 《JSch - Java实现的SFTP(文件下载详解篇)》   http://www.cnblogs.com/longyg/archive/2012/06/25/2556576.html 《JSch - Java实现的...
  • java sftp文件上传代码

    2018-03-15 20:28:31
    java sftp文件上传代码java sftp文件上传代码java sftp文件上传代码java sftp文件上传代码
  • java通过sftp上传文件

    千次阅读 2019-01-07 17:20:29
    如何通过java代码的形式采用sftp连接到服务器,进行文件上传下载等操作呢? 第一步 引入依赖包 基于maven构建工程,pom.xml加入依赖。 &lt;!-- sftp上传依赖包 --&gt; &lt;dependency&gt;  &...
  • Sftp下载文件

    2020-06-06 18:46:52
    } @Service public String exportExcel(String id){ // 文件输出位置win String localPath = "E:\\"; String outPath = ""; String system = System.getProperty("os.name"); if (system.toLowerCase().startsWith...
  • SFTP 获取 文件内容

    千次阅读 2020-08-31 15:58:26
    SFTP 获取远程文件的存入的属性 application.properties ftp.host=xxx.xxx.xxx.xxx ftp.port=22 ftp.username=username ftp.passwd=password ftp.characterset=UTF-8 获取文件配置: @Value("${ftp.host}") ...
  • php通过sftp上传文件

    2019-06-03 17:07:12
    sftp类 class Sftp { // 初始配置为NULL private $config = NULL; // 连接为NULL private $conn = NULL; //sftp resource private $ressftp = NULL; // 初始化 public function __construct($co...
  • sftp下载文件

    2020-04-20 19:29:03
    get -r 文件夹
  • 将一个有数据的文件由a传至b,传输完毕后b的文件是空的,请问这是什么原因,有无解决方案?
  • 主要介绍了Java使用SFTP上传文件到服务器的简单使用,非常不错,具有参考借鉴价值,需要的朋友可以参考下
  • sftp ftp文件同步方案

    2017-04-12 17:31:00
    sftp ftp文件同步方案 1. 需求 1.1实现网关服务器的ftp服务器的/batchFileRequest目录下文件向徽商所使用的sftp服务器的/batchFileRequest目录同步文件 1.2实现徽商所使用的sftp服务器的/batchFileResult目录文件...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 44,843
精华内容 17,937
关键字:

sftp全部文件