• ftp上传下载


      1 package com.mall.business.active;
      2 
      3 import java.io.File;
      4 import java.io.FileInputStream;
      5 import java.io.FileNotFoundException;
      6 import java.io.IOException;
      7 import java.io.InputStream;
      8 import java.io.OutputStream;
      9 import java.text.SimpleDateFormat;
     10 import java.util.Date;
     11 import java.util.Properties;
     12 import java.util.Vector;
     13 
     14 import org.apache.log4j.LogManager;
     15 import org.apache.log4j.Logger;
     16 
     17 import com.jcraft.jsch.Channel;
     18 import com.jcraft.jsch.ChannelSftp;
     19 import com.jcraft.jsch.JSch;
     20 import com.jcraft.jsch.JSchException;
     21 import com.jcraft.jsch.Session;
     22 import com.jcraft.jsch.SftpException;
     23 import com.mall.timer.TimerManager;
     24 
     25 public class SshSftp {
     26     /**
     27      * 利用JSch包实现SFTP下载、上传文件
     28      * @param ip
     29      *            主机IP
     30      * @param user
     31      *            主机登陆用户名
     32      * @param psw
     33      *            主机登陆密码
     34      * @param port
     35      *            主机ssh2登陆端口
     36      * @param url
     37      *            保存位置
     38      * @param imgUrl
     39      *            保存位置(域名)
     40      * @param localpath
     41      *            本地文件位置
     42      * @param newname
     43      *            新文件名         
     44      */
     45     private static Logger log=LogManager.getLogger(SshSftp.class);
     46     
     47     public static String sshSftp(String ip, String user, String psw, int port,
     48             String url, String imgUrl, String localpath, String newname) {
     49         Session session = null;
     50         Channel channel = null;
     51         ChannelSftp sftp = null;
     52        
     53         JSch jsch = new JSch();
     54         try {
     55             if (port <= 0) {
     56                 // 连接服务器,采用默认端口-1
     57                 session = jsch.getSession(user, ip);
     58             } else {
     59                 // 采用指定的端口连接服务器
     60                 session = jsch.getSession(user, ip, port);
     61             }
     62 
     63             // 如果服务器连接不上,则抛出异常
     64             if (session == null) {
     65                 log.info("未连接服务器:session is null");
     66                 return null;
     67                 //throw new Exception("session is null");
     68             }
     69             
     70             // 设置登陆主机的密码
     71             session.setPassword(psw);// 设置密码
     72             // 设置第一次登陆的时候提示,可选值:(ask | yes | no)
     73             session.setConfig("StrictHostKeyChecking", "no");
     74             // 设置登陆超时时间
     75             session.connect(30000);
     76 
     77             // 创建sftp通信通道
     78             channel = (Channel) session.openChannel("sftp");
     79             channel.connect(10000);
     80             sftp = (ChannelSftp) channel;
     81         }catch(Exception e){
     82             log.info("未连接服务器"+e.getMessage());
     83             return null;
     84         }    
     85 
     86         try {
     87             sftp.ls(url); // 首先查看下目录,如果不存在,系统会被错,捕获这个错,生成新的目录。
     88         } catch (Exception e) {
     89             try {
     90                 sftp.mkdir(url);
     91             } catch (SftpException e1) {
     92                 log.info("创建文件夹异常,msg:"+e1.getMessage());
     93                 return null;
     94             }
     95         }
     96         
     97         Date date = new Date();
     98         SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
     99         try {
    100             sftp.ls(url+"/"+format.format(date)); // 首先查看下目录,如果不存在,系统会被错,捕获这个错,生成新的目录。
    101         } catch (Exception e) {
    102             try {
    103                 sftp.mkdir(url+"/"+format.format(date));
    104             } catch (SftpException e1) {
    105                 log.info("创建文件夹异常,msg:"+e1.getMessage());
    106                 return null;
    107             }
    108         }
    109 
    110         try{
    111             // 进入服务器指定的文件夹
    112             sftp.cd(url+"/"+format.format(date));
    113 
    114             // 列出服务器指定的文件列表
    115             /*
    116              * Vector v = sftp.ls("*.jsp"); for(int i=0;i<v.size();i++){
    117              * System.out.println(v.get(i)); }
    118             */
    119 
    120             // 以下代码实现从本地上传一个文件到服务器,如果要实现下载,对换以下流就可以了
    121             OutputStream outstream = sftp.put(newname);
    122             // InputStream instream = new FileInputStream(new
    123             // File("H:/downloadFile/1223.jpg"));
    124             InputStream instream = new FileInputStream(new File(localpath));
    125 
    126             byte b[] = new byte[1024];
    127             int n;
    128             while ((n = instream.read(b)) != -1) {
    129                 outstream.write(b, 0, n);
    130             }
    131 
    132             outstream.flush();
    133             outstream.close();
    134             instream.close();
    135             
    136             return imgUrl+format.format(date)+"/"+newname;
    137         }catch (Exception e) {
    138             e.printStackTrace();
    139             return null;
    140         } finally {
    141             session.disconnect();
    142             channel.disconnect();
    143         }
    144     }
    145 
    146     public static void main(String[] args) {
    147         String ip = "***";
    148         String user = "**";
    149         String psw = "**";
    150         int port = 22;
    151         String url = "**";
    152         String imgUrl = "***";
    153         String localpath = "H:/downloadFile/接口测试文档.doc";
    154         String newname = "aaa.doc";
    155 
    156         SshSftp sftp = new SshSftp();
    157         sftp.sshSftp(ip,user,psw,port,url,imgUrl,localpath,newname);
    158 
    159     }
    160 
    161 }
  • 相关阅读:
    .net 第一次请求比较慢
    配置文件读取与修改
    关系型数据库设计
    dynamic动态类型的扩展方法
    软件测试作业(三)
    软件测试作业(二)
    软件项目管理作业(二)
    软件项目管理作业(一)
    软件测试作业(一)
    C#最后一次作业(暂定)
  • 原文地址:https://www.cnblogs.com/lixin890808/p/3904873.html
Copyright © 2020-2023  润新知