:doodle{ @size: 100vm 98vmin; } position: fixed; top: @r(1%, 100%); left: @r(1%, 100%); width: 2px; height: 2px; background: #04033e; border-radius: 50%; z-index:-999; background: hsl(@r(90, 120, 3), @r(90%, 100%), @r(30%, 40%)); zoom: @rn(.1, 5, 3); transform: rotate(@r(360deg)) translate(@r(-50, 50)vmin, @r(-50, 50)vmin); animation: move @r(20, 40)s infinite @r(-10, 0)s @p(linear, ease-in, ease-in-out) alternate; box-shadow: 0 0 1px hsl(@r(90, 120, 3), @r(90%, 100%), @r(30%, 40%)), 0 0 3px hsl(@r(90, 120, 3), @r(90%, 100%), @r(30%, 40%)); @keyframes move { 0% { transform: rotate(0) translate(0, 0); } 100% { transform: rotate(720) translate(-90, -90); } } @keyframes starMove{ from { } to { } } @keyframes weiba{ 100%{ box-shadow: 0 0 100px #fff, 0 0 300px #fff; } }

SFTP

还是前段时间,做了一个项目,里面需要访问并操作SFTP服务器。 百度了一些用例,记录一下。

主要引用的包

com.jcraft.jsch

工具类如下:

@Slf4j
public class SFTPClient {
    private ChannelSftp sftp;

    private Session session;
    
    /*
     * 登录sftp服务器,使用完成后,需调用logout方法登出
     * */
    public void login(String user, String psw, String host, int port, String privateKey) throws JSchException {
        try {
            if (sftp != null && sftp.isConnected()) {
                logout();
            }
            JSch jsch = new JSch();
            if (ObjectUtils.isNotEmpty(privateKey)) {
                jsch.addIdentity(privateKey);
            }

            session = jsch.getSession(user, host, port);

            if (ObjectUtils.isNotEmpty(psw)) {
                session.setPassword(psw);
            }

            // 此步骤设置 第一次登录时,不提示 是否保存私钥
            session.setConfig("StrictHostKeyChecking", "no");
            session.connect(30000);
            Channel channel = session.openChannel("sftp");
            channel.connect();

            sftp = (ChannelSftp) channel;

        } catch (Exception e) {
            log.error("SFTP连接异常:" + e.getMessage()+e);
        }
    }
    
    
     /*
     * 安全登出sftp服务器
     * */
    public void logout() {
        if (sftp != null) {
            if (sftp.isConnected()) {
                sftp.disconnect();
            }
        }
        if (session != null) {
            if (session.isConnected()) {
                session.disconnect();
            }
        }
    }
    
    // 使用sftp可以进行文件操作
    // 获取文件
    sftp.get(path);
    // 上传文件
    sftp.put(path);
    // 访问文件夹
    sftp.cd(path);
    // 创建文件夹
    sftp.mkdir(path);
    
    /*
     * src:需要获取的文件路径
     * InputStream:文件流
     * */
    public InputStream getFile(String src) throws Exception {
        isConnected();
        try {
            return sftp.get(src);
        } catch (Exception e) {
            logout();
            log.error("获取文件出现异常 :" + e.getMessage());
            throw e;
        }
    }
    
    
     /*
     * fileStream:需要上传的文件流
     * targetFileSrc:上传目录的完整路径,包括文件名
     * */
    public void uploadFile(InputStream fileStream, String targetFileSrc) throws Exception {
        isConnected();
        OutputStream os = sftp.put(targetFileSrc);
        if (ObjectUtils.isNotEmpty(os)) {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            try {
                // 设定每次传输的数据块大小为256kb;
                byte[] buff = new byte[1024 * 256];
                int len;
                while ((len = fileStream.read(buff)) != -1) {
                    baos.write(buff, 0, len);
                }
                baos.flush();
                byte[] fileBytes = baos.toByteArray();
                os.write(fileBytes);
            } catch (IOException ioException) {
                logout();
                log.error("上传文件失败!异常信息:" + ioException.getMessage());
            } finally {
                os.flush();
                os.close();
                baos.flush();
                baos.close();
            }
        } else {
            log.info("获取os失败!上传文件失败!");
        }
    }
    
    

}

posted @ 2019-12-09 09:10  先小减个20斤  阅读(1383)  评论(0编辑  收藏  举报
xxxx