精华内容
下载资源
问答
  • sftp上传文件
    千次阅读
    2021-08-05 03:05:12

    最近用到SFTP上传文件查找了一些资料后自己做了一点总结,方便以后的查询

    /**

    * 将文件上传到服务器

    *

    * @param filePath

    * 文件路径

    * @param channelSftp

    * channelSftp对象

    * @return

    */

    public static boolean uploadFile(String filePath, ChannelSftp channelSftp) {

    OutputStream outstream = null;

    InputStream instream = null;

    boolean successFlag = false;

    try {

    File isfile = new File(filePath);

    if (isfile.isFile()) {

    outstream = channelSftp.put(isfile.getName());

    File file = new File(filePath);

    if (file.exists()) {

    instream = new FileInputStream(file);

    byte b[] = new byte[1024];

    int n;

    while ((n = instream.read(b)) != -1) {

    outstream.write(b, 0, n);

    }

    outstream.flush();

    }

    successFlag = true;

    }

    } catch (Exception e) {

    e.printStackTrace();

    } finally {

    try {

    if (instream != null) {

    instream.close();

    }

    if (outstream != null) {

    outstream.close();

    }

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    return successFlag;

    }

    private static Session initJschSession()

    throws JSchException {

    int ftpPort = 0;

    String ftpHost = "";

    String port = "00"; //sftp的端口号

    String ftpUserName = ""; //用户名

    String ftpPassword = ""; //链接的密码

    String privateKey = ""; //

    String passphrase = "";

    if (port != null && !port.equals("")) {

    ftpPort = Integer.valueOf(port);

    }

    JSch jsch = new JSch(); // 创建JSch对象

    if (StringUtils.isNotBlank(privateKey)

    && StringUtils.isNotBlank(passphrase)) {

    jsch.addIdentity(privateKey, passphrase);

    }

    if (StringUtils.isNotBlank(privateKey)

    && StringUtils.isBlank(passphrase)) {

    jsch.addIdentity(privateKey);

    }

    jsch.getSession(ftpUserName, ftpHost, ftpPort);

    Session session = jsch.getSession(ftpUserName, ftpHost, ftpPort); // 根据用户名,主机ip,端口获取一个Session对象

    if (StringUtils.isNotBlank(ftpPassword)) {

    session.setPassword(ftpPassword); // 设置密码

    }

    return session;

    }

    /**

    * 获取ChannelSftp链接

    *

    * @param timeout

    * 超时时间

    * @return 返回ChannelSftp对象

    * @throws JSchException

    */

    public static ChannelSftp getChannelSftp(Session session, int timeout)

    throws JSchException {

    Channel channel = null;

    Properties config = new Properties();

    config.put("StrictHostKeyChecking", "no");

    session.setConfig(config); // 为Session对象设置properties

    session.setTimeout(timeout); // 设置timeout时间

    session.connect(); // 通过Session建立链接

    channel = session.openChannel("sftp"); // 打开SFTP通道

    channel.connect(); // 建立SFTP通道的连接

    return (ChannelSftp) channel;

    }

    /**

    * 断开sftp链接

    *

    * @param session

    * 会话

    * @param channel

    * 通道

    */

    public static void closeConnection(Channel channel, Session session) {

    try {

    if (session != null) {

    session.disconnect(); //关闭session链接

    }

    if (channel != null) {

    channel.disconnect(); //断开连接

    }

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    这里的用户名密码都是自己设置,这里的方法进行了简单的封装,方便使用

    sftp上传到远程服务器

    开发遇到一个需求,需要将图片通过sftp上传到远程服务器上,之前没用过这个功能,折腾了我好几天才搞定,下面记录下我的处理方法: $sftp = 'ssh2.sftp://';//连接sftp $con ...

    WPF上传文件到服务器

    利用WebClient 上传文件到服务器 创建一个空网站,创建一个UploadFile.aspx项, 服务器报500错误:检查文件保存路径是否存在,检查文件大小限制 protected void Pa ...

    Android上传文件至服务器(上)

    每一次都不能上首页,真悲催..管理员让我上一次首页? 很多时候我更愿意一个人写代码,与其在垃圾代码上改改改,我更愿意直接重构. 整洁的代码简单直接.整洁的代码如同优美的散文.整洁的代码从不隐藏设计者的 ...

    android上传文件到服务器

    package com.spring.sky.image.upload.network; import java.io.DataOutputStream; import java.io.File; i ...

    SFTP 上传文件夹

    使用sftp上传文件夹时若使用如下命令并不work: put /media/Research/GWAS_Class/* Desktop/ 此时,需要添加一个参数 -r, 另外在目标文件夹下面建立一个同 ...

    Android端通过HttpURLConnection上传文件到服务器

    Android端通过HttpURLConnection上传文件到服务器 一:实现原理 最近在做Android客户端的应用开发,涉及到要把图片上传到后台服务器中,自己选择了做Spring3 MVC HT ...

    joomla安装插件报错:上传文件到服务器发生了一个错误。 过小的PHP文件上传尺寸

    在安装joomla的AKeeba插件的时候报错如下:上传文件到服务器发生了一个错误. 过小的PHP文件上传尺寸.解决方法是修改php.ini文件,打开文件后搜索upload_max_filesize! ...

    android -上传文件到服务器

    android上传文件到服务器       重点:最好是设置好content-type这些参数的配置!     package com.spring.sky.image.upload.network; ...

    用winscp从本地上传文件到服务器上出现复制文件到远端时错误。

    用winscp从本地上传文件到服务器上出现复制文件到远端时错误. 错误码:4 服务器返回的错误消息:write failed 报错如下图所示: 分析过程: 1.刚开始以为是权限不够,后面上网查了一下是 ...

    随机推荐

    Android Studio快捷键

    一.android studio 默认快捷键 刚开始接触一款开发软件,想必很想了解它的快捷方式,这会对你的编程起到很好的帮助,提高工作效率,接下来给你介绍下Android Studio一些常用的快 ...

    mybatis 中的where标签

    mybatis中的where标签可以去除 开头的 and 或者 or 但是放在后面的不行 失败的:

    SSH-Hibernate+Struts2+Spring的股票项目整合

    创建项目之前:我们需要导入我们需要的Hibernate和Struts2和Spring的相关架包.(博客自创,如有问题请留言博主,拒绝盗版,支持正版http://www.cnblogs.com/WuXu ...

    使用Emmet(前身Zen Coding)加速Web前端开发

    Emmet插件以前被称作为Zen Coding,是一个文本编辑器的插件,它可以帮助您快速编写HTML和CSS代码,从而加速Web前端开发.早在2009年,Sergey Chikuyonok写过一篇文章 ...

    java jdbc 连接mysql 数据库

    JDBC连接MySQL 加载及注册JDBC驱动程序 Class.forName("com.mysql.jdbc.Driver"); Class.forName("com. ...

    Hadoop(六)之HDFS的存储原理(运行原理)

    前言 其实说到HDFS的存储原理,无非就是读操作和写操作,那接下来我们详细的看一下HDFS是怎么实现读写操作的! 一.HDFS读取过程 1)客户端通过调用FileSystem对象的open()来读取希 ...

    [la P5031&hdu P3726] Graph and Queries

    [la P5031&hdu P3726] Graph and Queries Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: ...

    查看mysql的版本号

    查看mysql的版本号 1.1 在命令行登录mysql,即可看到mysql的版本号 [root@heyong ~]# mysql -uroot -p Enter password: Welcome t ...

    MySQL Transaction--MySQL与SQL Server在可重复读事务隔离级别上的差异

    MySQL和SQL Server两种数据库在REPEATABLE-READ事务隔离级别实现方式不同,导致使用上也存在差异. 在MySQL中,默认使用REPEATABLE-READ事务隔离级别,MySQ ...

    20155239 《网络对抗》Exp4 恶意代码分析

    20155239 Exp4 恶意代码分析 使用schtasks指令监控系统运行 先在C盘目录下建立一个netstatlog.bat文件,用来将记录的联网结果格式化输出到nets ...

    更多相关内容
  • 使用Putty中的psftp工具实现bat脚本上传sftp文件,如果需要定时间,可自行使用Windows任务计划程序创建定时任务达到自动上传的效果
  • windows脚本自动归档、压缩文件,并通过sftp方式(公私钥身份验证)将文档上传至备份服务器(文档中包含详细步骤与脚本源码,本文档为原创文档)。
  • 主要介绍了Java使用SFTP上传文件到服务器的简单使用,非常不错,具有参考借鉴价值,需要的朋友可以参考下
  • 基于qt5、sftp上传文件

    2018-12-05 09:54:00
    基于qt5+mingw+win7,里面包括有封装好的sftp库。参考原作者https://download.csdn.net/download/qq_26360165/10576625并修改。最简单的一个小demo
  • sftp上传文件

    千次阅读 2020-06-24 09:27:28
    SFTP工具类 package cn.com.doone.sc.tx.cloud.dyb.system.util; import com.jcraft.jsch.; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.; ...

    SFTP工具类

    package cn.com.doone.sc.tx.cloud.dyb.system.util;

    import com.jcraft.jsch.;
    import org.apache.commons.io.IOUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import java.io.
    ;
    import java.util.Properties;
    import java.util.Vector;
    /**

    • @Auther: liufei

    • @Date: 2020/6/22 09:34

    • @ClassName: SFTPUtil

    • @Description: sftp连接工具类

    • @date 2017年5月22日 下午11:17:21

    • @version 1.0.0
      */
      public class SFTPUtil {
      private transient Logger log = LoggerFactory.getLogger(this.getClass());

      private ChannelSftp sftp;

      private Session session;
      /** FTP 登录用户名*/
      private String username;
      /** FTP 登录密码*/
      private String password;
      /** 私钥 /
      private String privateKey;
      /
      * FTP 服务器地址IP地址*/
      private String host;
      /** FTP 端口*/
      private int port;

      /**

      • 构造基于密码认证的sftp对象
      • @param password
      • @param host
      • @param port
        */
        public SFTPUtil(String username, String password, String host, int port) {
        this.username = username;
        this.password = password;
        this.host = host;
        this.port = port;
        }

      /**

      • 构造基于秘钥认证的sftp对象
      • @param host
      • @param port
      • @param privateKey
        */
        public SFTPUtil(String username, String host, int port, String privateKey) {
        this.username = username;
        this.host = host;
        this.port = port;
        this.privateKey = privateKey;
        }

      public SFTPUtil(){}

      /**

      • 连接sftp服务器

      • @throws Exception
        */
        public void login(){
        try {
        JSch jsch = new JSch();
        if (privateKey != null) {
        jsch.addIdentity(privateKey);// 设置私钥
        log.info(“sftp connect,path of private key file:{}” , privateKey);
        }
        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”);
        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 FileNotFoundException

      • @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 IOException

      • @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
      •        要列出的目录
        
      • @param
      • @return
      • @throws SftpException
        */
        public Vector<?> listFiles(String directory) throws SftpException {
        return sftp.ls(directory);
        }

      public static void main(String[] args) throws SftpException, IOException {
      SFTPUtil sftp = new SFTPUtil(“lanhuigu”, “123456”, “192.168.200.12”, 22);
      sftp.login();
      //byte[] buff = sftp.download("/opt", “start.sh”);
      //System.out.println(Arrays.toString(buff));
      File file = new File(“D:\upload\index.html”);
      InputStream is = new FileInputStream(file);
      sftp.upload("/data/work", “test_sftp_upload.csv”, is);
      sftp.logout();
      }
      }

    这边需要用springboot上传图片到服务器里面的某个文件夹

    @PostMapping("/uploadFile")
    public ResponseMessage upload(@RequestParam(value = "file", required = false)MultipartFile file, HttpServletRequest request) {
    
        Long timeMillis = System.currentTimeMillis();
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
        String originalFilename = file.getOriginalFilename();//文件全名称
        String extName = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);//文件扩展名
        Date date = new Date();
        String timeString = format.format(date);
        String newPictureName = timeString + "_" + timeMillis + "." + extName;
        SFTPUtil sftp = new SFTPUtil("wujun", "Gzdx132@wujun", "135.0.64.132", 22);
        sftp.login();
        try {
            InputStream inputStream = file.getInputStream();
            sftp.upload("/data/imgXy", newPictureName, inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (SftpException e) {
            e.printStackTrace();
        }
        sftp.logout();
    
        JSONObject result = new JSONObject();
        result.put("fileUrl", "https://m.gz.189.cn/imgXy/"+newPictureName);
        return new ResponseMessage().success(result);
    }
    

    下面来讲解这个
    在这里插入图片描述

    展开全文
  • 本文实例为大家分享了java实现SFTP上传文件到资源服务器工具类,供大家参考,具体内容如下首先得创建连接sftp服务器的公共类MySftp.java:package cn.test.util;import java.io.File;import java.io.FileInputStream...

    本文实例为大家分享了java实现SFTP上传文件到资源服务器工具类,供大家参考,具体内容如下

    首先得创建连接sftp服务器的公共类MySftp.java:

    package cn.test.util;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileOutputStream;

    import java.text.SimpleDateFormat;

    import java.util.Date;

    import java.util.Properties;

    import java.util.Vector;

    import javax.servlet.http.HttpServletRequest;

    import com.jcraft.jsch.Channel;

    import com.jcraft.jsch.ChannelSftp;

    import com.jcraft.jsch.JSch;

    import com.jcraft.jsch.Session;

    import com.jcraft.jsch.SftpException;

    public class MySFTP {

    /**

    * 连接sftp服务器

    * @param host 主机

    * @param port 端口

    * @param username 用户名

    * @param password 密码

    */

    public ChannelSftp connect(String host, int port, String username,

    String password) {

    ChannelSftp sftp = null;

    try {

    JSch jsch = new JSch();

    jsch.getSession(username, host, port);

    Session sshSession = jsch.getSession(username, host, port);

    sshSession.setPassword(password);

    Properties sshConfig = new Properties();

    sshConfig.put("StrictHostKeyChecking", "no");

    sshSession.setConfig(sshConfig);

    sshSession.connect();

    Channel channel = sshSession.openChannel("sftp");

    channel.connect();

    sftp = (ChannelSftp) channel;

    } catch (Exception e) {

    }

    return sftp;

    }

    /**

    * 上传文件

    *

    * @param directory

    * 上传的目录

    * @param uploadFile

    * 要上传的文件

    * @param sftp

    */

    public void upload(String directory, String uploadFile, ChannelSftp sftp) {

    try {

    sftp.cd(directory);

    File file = new File(uploadFile);

    sftp.put(new FileInputStream(file), file.getName());

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    /**

    * 下载文件

    *

    * @param directory

    * 下载目录

    * @param downloadFile

    * 下载的文件

    * @param saveFile

    * 存在本地的路径

    * @param sftp

    */

    public void download(String directory, String downloadFile,

    String saveFile, ChannelSftp sftp) {

    try {

    sftp.cd(directory);

    File file = new File(saveFile);

    sftp.get(downloadFile, new FileOutputStream(file));

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    /**

    * 删除文件

    *

    * @param directory

    * 要删除文件所在目录

    * @param deleteFile

    * 要删除的文件

    * @param sftp

    */

    public void delete(String directory, String deleteFile, ChannelSftp sftp) {

    try {

    sftp.cd(directory);

    sftp.rm(deleteFile);

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    public void uploadSFTP(HttpServletRequest request,String[] uploadFiles) throws Exception {

    MySFTP mySFTP = new MySFTP();

    SFTPUtil sFTPUtil =new SFTPUtil();

    ChannelSftp sftp = null;

    Session session = null;

    try {

    sftp = mySFTP.connect(SystemConstants.SFTP_host, Integer.parseInt(SystemConstants.SFTP_port), SystemConstants.SFTP_username, SystemConstants.SFTP_password);

    for (int i = 0; i < uploadFiles.length; i++) {

    Date uploadTime = new Date();

    String url=request.getSession().getServletContext().getRealPath("").replaceAll("\\\\", "/");

    String uploadFile =url.substring(0, url.lastIndexOf("/"))+uploadFiles[i];

    // String saveFile="";

    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

    String ymd = sdf.format(uploadTime);

    String relativePath = ymd + "/";

    String directory = SystemConstants.SFTP_directory+ relativePath;

    sFTPUtil.createDir(directory, sftp);

    mySFTP.upload(directory, uploadFile, sftp);

    sftp.cd(directory);

    }

    } catch (Exception e) {

    e.printStackTrace();

    }finally{

    try {

    if(sftp != null) {

    sftp.disconnect();

    }

    } catch (Exception e) {

    e.printStackTrace();

    }

    try {

    if(session != null) {

    session.disconnect();

    }

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    }

    /**

    * 列出目录下的文件

    *

    * @param directory

    * 要列出的目录

    * @param sftp

    * @return

    * @throws SftpException

    */

    @SuppressWarnings("rawtypes")

    public Vector listFiles(String directory, ChannelSftp sftp)

    throws SftpException {

    return sftp.ls(directory);

    }

    }

    上传图片时,调用SFTPUtil类中的uploadMultipartFile方法即可。

    package cn.test.util;

    import java.text.SimpleDateFormat;

    import java.util.Date;

    import java.util.Random;

    import org.springframework.web.multipart.MultipartFile;

    import com.jcraft.jsch.ChannelSftp;

    import com.jcraft.jsch.Session;

    import com.jcraft.jsch.SftpATTRS;

    import com.jcraft.jsch.SftpException;

    /**文件上传工具类*/

    public class SFTPUtil {

    /**

    * spring文件上传方法

    * */

    public static String uploadMultipartFile(MultipartFile file,String fileExt) {

    SFTPUtil sFTPUtil =new SFTPUtil();

    String originalFilename = file.getOriginalFilename();

    //生成文件名

    Date uploadTime = new Date();

    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

    String ymd = sdf.format(uploadTime);

    String relativePath = ymd+"/";

    SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");

    String fileName = df.format(uploadTime) + "_" + new Random().nextInt(1000) + "." + fileExt;

    // String fileName = String.valueOf(new Date().getTime())+ new Random().nextInt(10000)+"."+originalFilename.substring(originalFilename.lastIndexOf(".") + 1);

    String directory=SystemConstants.SFTP_directory+relativePath;

    ChannelSftp sftp =null;

    Session session = null;

    try {

    MySFTP mySFTP = new MySFTP();

    sftp = mySFTP.connect(SystemConstants.SFTP_host, Integer.parseInt(SystemConstants.SFTP_port), SystemConstants.SFTP_username, SystemConstants.SFTP_password);

    session = sftp.getSession();

    sFTPUtil.createDir(directory, sftp);

    sftp.cd(directory);

    sftp.put(file.getInputStream(), fileName);

    sftp.disconnect();

    sftp.getSession().disconnect();

    } catch (Exception e) {

    System.out.println("文件[" + originalFilename + "]上传失败,堆栈轨迹如下:");

    e.printStackTrace();

    }finally{

    try {

    if(sftp != null) {

    sftp.disconnect();

    }

    } catch (Exception e) {

    e.printStackTrace();

    }

    try {

    if(session != null) {

    session.disconnect();

    }

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    String reName=SystemConstants.SFTP_httpBaseUrl+relativePath+fileName;

    return reName;

    }

    /**

    * 创建目录

    * @throws Exception

    */

    public void createDir(String createpath, ChannelSftp sftp) throws Exception {

    try {

    if (isDirExist(sftp, createpath)) {

    sftp.cd(createpath);

    }

    String pathArry[] = createpath.split("/");

    StringBuffer filePath = new StringBuffer("/");

    for (String path : pathArry) {

    if (path.equals("")) {

    continue;

    }

    filePath.append(path + "/");

    if (isDirExist(sftp, filePath.toString())) {

    sftp.cd(filePath.toString());

    } else {

    // 建立目录

    sftp.mkdir(filePath.toString());

    // 进入并设置为当前目录

    sftp.cd(filePath.toString());

    }

    }

    sftp.cd(createpath);

    } catch (SftpException e) {

    throw new Exception(e.getMessage());

    }

    }

    /**

    * 判断目录是否存在

    */

    public boolean isDirExist(ChannelSftp sftp,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;

    }

    }

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • Java通过sftp上传文件

    2021-03-06 17:19:22
    如何通过java代码的形式采用sftp连接到服务器,进行文件上传下载等操作呢?第一步,引入依赖包com.jcraftjsch0.1.53jsch常用密码登陆和密钥认证的形式进行sftp服务器登陆。第二步,编写工具类,并采用main方法进行...

    Linux操作系统我们经常使用ssh中的ftp,sftp连接服务器,做相应操作。

    如何通过java代码的形式采用sftp连接到服务器,进行文件上传下载等操作呢?

    第一步,引入依赖包

    com.jcraft

    jsch

    0.1.53

    jsch常用密码登陆和密钥认证的形式进行sftp服务器登陆。

    第二步,编写工具类,并采用main方法进行上传测试,代码如下

    package com.guohuai.util;

    import java.io.ByteArrayInputStream;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileNotFoundException;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.io.InputStream;

    import java.io.UnsupportedEncodingException;

    import java.util.Properties;

    import java.util.Vector;

    import org.apache.commons.io.IOUtils;

    import org.slf4j.Logger;

    import org.slf4j.LoggerFactory;

    import com.jcraft.jsch.Channel;

    import com.jcraft.jsch.ChannelSftp;

    import com.jcraft.jsch.JSch;

    import com.jcraft.jsch.JSchException;

    import com.jcraft.jsch.Session;

    import com.jcraft.jsch.SftpException;

    /**

    *

    * @ClassName: SFTPUtil

    * @Description: sftp连接工具类

    * @date 2017年5月22日 下午11:17:21

    * @version 1.0.0

    */

    public class SFTPUtil {

    private transient Logger log = LoggerFactory.getLogger(this.getClass());

    private ChannelSftp sftp;

    private Session session;

    /** FTP 登录用户名*/

    private String username;

    /** FTP 登录密码*/

    private String password;

    /** 私钥 */

    private String privateKey;

    /** FTP 服务器地址IP地址*/

    private String host;

    /** FTP 端口*/

    private int port;

    /**

    * 构造基于密码认证的sftp对象

    * @param userName

    * @param password

    * @param host

    * @param port

    */

    public SFTPUtil(String username, String password, String host, int port) {

    this.username = username;

    this.password = password;

    this.host = host;

    this.port = port;

    }

    /**

    * 构造基于秘钥认证的sftp对象

    * @param userName

    * @param host

    * @param port

    * @param privateKey

    */

    public SFTPUtil(String username, String host, int port, String privateKey) {

    this.username = username;

    this.host = host;

    this.port = port;

    this.privateKey = privateKey;

    }

    public SFTPUtil(){}

    /**

    * 连接sftp服务器

    *

    * @throws Exception

    */

    public void login(){

    try {

    JSch jsch = new JSch();

    if (privateKey != null) {

    jsch.addIdentity(privateKey);// 设置私钥

    log.info("sftp connect,path of private key file:{}" , privateKey);

    }

    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 in

    * 输入流

    * @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 FileNotFoundException

    * @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 IOException

    * @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

    * 要列出的目录

    * @param sftp

    * @return

    * @throws SftpException

    */

    public Vector> listFiles(String directory) throws SftpException {

    return sftp.ls(directory);

    }

    public static void main(String[] args) throws SftpException, IOException {

    SFTPUtil sftp = new SFTPUtil("lanhuigu", "123456", "192.168.200.12", 22);

    sftp.login();

    //byte[] buff = sftp.download("/opt", "start.sh");

    //System.out.println(Arrays.toString(buff));

    File file = new File("D:\\upload\\index.html");

    InputStream is = new FileInputStream(file);

    sftp.upload("/data/work", "test_sftp_upload.csv", is);

    sftp.logout();

    }

    }

    展开全文
  • sftp上传文件失败解决

    千次阅读 2022-03-08 15:36:50
    同事求助,说他用sftp上传文件失败。 首先想到的是权限问题。于是登陆服务器,cd到上传目录,ls -l看上去没问题。 测试一下吧,用我自己的帐号sftp登陆,随便传一个文件,成功了。 哈,问题范围缩减了。 去同事...
  • 本篇文章主要介绍了java实现sftp客户端上传文件以及文件夹的功能代码,具有一定的参考价值,有兴趣的可以了解一下。
  • shell脚本sftp上传文件

    千次阅读 2022-01-27 15:49:17
    shell脚本sftp上传文件
  • 使用 sftp 上传文件到远程服务器 fileProcess.java:处理视频文件:1) 将一个视频文件分成 n 个块,每个块都有预定义的大小 2) 在每个块的末尾附加水平和垂直校验和数据以进行错误检测 3) 将 n 个块合并为一个文件 4...
  • 支持跨平台执行终端 通过SSH 执行跨平台执行终端 通过SFTP 执行远程上传或下载 文档
  • c# .net sftp上传文件

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

    2021-02-12 16:35:48
    /** * 将要上传文件地址(网络地址没试过) */ public String src; /** * 要保存到服务器的文件地址和名称(最好带后缀,如果不带后缀会变成未知文件) */ public String dst; /** * 尝试重复几次上传(未支持) */ ...
  • linux脚本sftp上传文件

    2022-09-22 10:49:33
    linux脚本sftp上传文件
  • shell脚本使用sftp上传文件sftp ${SFTP_HOST}:${PORT}
  • java使用SFTP上传文件到资源服务器本文实例为大家分享了java实现SFTP上传文件到资源服务器工具类,供大家参考,具体内容如下首先得创建连接sftp服务器的公共类MySftp.java:package cn.test.util;import java.io....
  • SFTP服务器搭建及C#实现SFTP上传文件

    千次阅读 2021-11-05 10:19:06
    需先通过NuGet将Renci.SshNet引用到项目中。 using Renci.SshNet; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text;... public class SFTP...
  • sftp上传文件和下载文件在SecrueCRT中使用stfp命令sftp中的常用命令pwdlpwdlsllsput-上传文件到服务器get-下载文件到本地 在SecrueCRT中使用stfp命令 sftp中的常用命令 pwd 查看sftp服务器中的当前所在路径 lpwd ...
  • JavaSFTP上传文件

    2018-08-03 15:47:12
    Java 操作SFTP上传文件下载案例,很值得看的,Java 操作SFTP上传文件下载案例,很值得看的。
  • sftp上传文件到服务器遇到的问题

    千次阅读 2022-03-24 13:39:50
    本地是win10系统,代码需要在Linux系统下跑,又不想装双系统,就想利用vscode将本地项目文件上传到Ubuntu服务器上,利用服务器跑程序。 查阅了很多资料,发现用sftp非常简单,但是由于自己没有用过Linux系统,更别提...
  • 最近遇到一点事,需要开放工作室服务器的网站目录上传文件权限,要求静态网站上传可以即传即用,考虑到简单起见我想到...可是 SFTP 上传的文件都是默认755,原本 vsftpd 可以用户 local_umask 控制上传文件权限,但...
  • Python sftp上传文件 速度过慢

    千次阅读 2021-02-24 10:31:23
    网络问题较大,自己用软件测试(winscp)同样很慢刚开始文件很少,读取目录速度没有那么慢,时间长了,文件变多 第一版代码 class SftpInfo(object): def __init__(self, username, password, timeout=3000): self...
  • step1: 检查是否安装lftp 假如显示如上图,执行sudo apt ...step3:上传文件 cd /home/ put test.txt by EOF 回车后等待上传完成 效果图: 如果出现异常Host key verification failed ssh -v roo...
  • 编写shell脚本-sftp上传文件

    千次阅读 2021-01-15 14:06:13
    #创建一个sh文件 nano yulisao.sh #编写shell脚本命令 # 略,根据自己需要编写。示例如下 #! /bin/sh echo "请输入字母y " read yourdata if [ "Y" = ${yourdata} -o "y" = ${yourdata} ] then echo "你输入的是...
  • 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, ...
  • SFTP上传文件权限被拒绝

    千次阅读 2021-07-26 05:06:43
    我正在尝试使用SFTP将excel文件从本地Windows PC上传到linux计算机。这是我的代码:private void uploadToSftp() {try{ChannelSftp sftpClient = null;Channel channel = null;JSch jsch = new JSch();Session ...

空空如也

空空如也

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

sftp上传文件