• sftp java 上传


    1. 注意问题

     uri的格式: sftp://zhangsan:123456@10.10.10.10:22

     dir问题 : 判断有没有 没有创建 然后进入 类推

     config问题: StrictHostKeyChecking=no

     进度问题 : 需要变量保存

    2. 代码

        private void transfer_sftp(String attrPath, Element groupNode, long size) throws JSchException, SftpException, UnsupportedEncodingException{
            attrPath = attrPath.replaceAll("sftp://", "");
            String[] tmps = attrPath.split(":");
            String dstUserName = tmps[0];
            int port = 22;
            String portstr = tmps[2].replaceAll("/", "");
            try {
                port = Integer.parseInt(portstr);
            } catch (NumberFormatException e) {
                e.printStackTrace();
            }
            String[] tmp = tmps[1].split("@");
            String dstPassword = tmp[0];
            String sftpIP = tmp[1];
            List<?> files = groupNode.selectNodes("File");
            for(int k=0; k<files.size(); k++){
                JSch jsch = new JSch();
                Session session = jsch.getSession(dstUserName, sftpIP, port);
                logger.info("JSch Session created: user:"+dstUserName + ",password="+dstPassword+",sftpIP="+sftpIP+",port="+port);
                session.setPassword(dstPassword);
                Properties sshConfig = new Properties();
                sshConfig.put("StrictHostKeyChecking", "no");
                session.setConfig(sshConfig);
                session.connect();
                logger.info("JSch Session connected > user:"+dstUserName);
                ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");
                channelSftp.connect();
                logger.info("Connected to "+ sftpIP);
                Element file = (Element) files.get(k);
                String srcFilePath = file.elementText("SrcFileName");
                String dstFilePath = file.elementText("DstFileName");
                logger.info("upload file on sftp protocol >> srcFilePath="+srcFilePath + ",dstFilePath="+dstFilePath);
                int index = dstFilePath.lastIndexOf("/");
                String path = dstFilePath.substring(0, index + 1);
                String filename = dstFilePath.substring(index + 1, dstFilePath.length());
                if (path.startsWith("/"))
                    path = path.substring(1);
                logger.info("dest path:"+path);
                if (filename.startsWith("/"))
                    filename = filename.substring(1);
                String[] pathArray = path.split("/");
                for (String pathStr : pathArray) {
                    try {
                        logger.info("channelsftp dir ::"+pathStr);
                        Vector ls = channelSftp.ls(pathStr);
                        if(ls != null){
                            channelSftp.cd(pathStr);
                        }
                    } catch (Exception e) {
                        logger.info("channelsftp catch mkdir ::"+pathStr);
                        channelSftp.mkdir(pathStr);
                        channelSftp.cd(pathStr);
                        e.printStackTrace();
                    }
                }
    //            String dir = new String(path.getBytes("gb2312"), "iso-8859-1");
    //            String destName = new String(filename.getBytes("gb2312"), "iso-8859-1");
    //            System.out.println("上传目录名名:::"+dir);
    //            System.out.println("上传后文件名:::"+destName);
    //            channelSftp.put(srcFilePath, dstFilePath, new SftpProgressMonitor() {
                channelSftp.put(srcFilePath, filename, new SftpProgressMonitor() {
                    
                    long n = 0L;
                    long _max = 0L;
                    
                    public long getN() {
                        return n;
                    }
    
                    public void setN(long n) {
                        this.n = n;
                    }
    
                    @Override
                    public void init(int arg0, String arg1, String arg2, long max) {
                        this._max = max;
                        logger.info("SFTP Transferring begin....._max="+_max);
                    }
                    
                    @Override
                    public void end() {
                        logger.info("SFTP Transferring end....");
                    }
                    
                    @Override
                    public boolean count(long count) {
                        n += count;
    //                    logger.info("SFTP Transferring  count="+count+",n="+n);
                        if(_max!=0){
                            run_progress = (int) ((n*100)/_max);
    //                        logger.info("the progress of upload file through sftp :" + run_progress + "%");
                        }
                        return true;
                    }
                }, ChannelSftp.OVERWRITE);
                channelSftp.quit();
                session.disconnect();
                
            }
        }
  • 相关阅读:
    struts2学习笔记之校验器
    struts2学习笔记之文件上传
    在ASP.net MVC里用Jquery的Ajax功能调用相关LinqtoSQL生成的类出现错误循环引用
    Linq,企业类库,EXECL生成,Execl chart的一些基本操作记录.(一)
    记录Linq所学.
    记录一个很平常的想法.
    链表反序(C#版)
    oracle 体系结构
    Oracle的sys和system用户的区别
    数据库触发器的理解
  • 原文地址:https://www.cnblogs.com/rocky-fang/p/6430487.html
Copyright © 2020-2023  润新知