欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

sftp上传文件

程序员文章站 2022-07-12 10:03:20
...

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", "aaa@qq.com", "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);
}

下面来讲解这个
sftp上传文件

相关标签: 笔记