Apache SSHD实现SFTP服务端,客户端访问进行远程文件上传下载

Apache SSHD实现SFTP服务端,客户端访问进行远程文件上传下载,第1张

package jsch;

import javaioFile;

import javaioFileInputStream;

import javautilProperties;

import comjcraftjschChannel;

import comjcraftjschChannelSftp;

import comjcraftjschJSch;

import comjcraftjschJSchException;

import comjcraftjschSession;

public class Test {

    protected String host;//sftp服务器ip

    protected String username;//用户名

    protected String password;//密码

    protected String privateKey;//密钥文件路径

    protected String passphrase;//密钥口令

    protected int port = 22;//默认的sftp端口号是22

    /

      获取连接

      @return channel

     /

    public ChannelSftp connectSFTP() {

        JSch jsch = new JSch();

        Channel channel = null;

        try {

            if (privateKey != null && !""equals(privateKey)) {

                //使用密钥验证方式,密钥可以使有口令的密钥,也可以是没有口令的密钥

                if (passphrase != null && ""equals(passphrase)) {

                    jschaddIdentity(privateKey, passphrase);

                } else {

                    jschaddIdentity(privateKey);

                }

            }

            Session session = jschgetSession(username, host, port);

            if (password != null && !""equals(password)) {

                sessionsetPassword(password);

            }

            Properties sshConfig = new Properties();

            sshConfigput("StrictHostKeyChecking", "no");// do not verify host key

            sessionsetConfig(sshConfig);

            // sessionsetTimeout(timeout);

            sessionsetServerAliveInterval(92000);

            sessionconnect();

            //参数sftp指明要打开的连接是sftp连接

            channel = sessionopenChannel("sftp");

            channelconnect();

        } catch (JSchException e) {

            eprintStackTrace();

        }

        return (ChannelSftp) channel;

    }

    

    /

      上传文件

      

      @param directory

                 上传的目录

      @param uploadFile

                 要上传的文件

      @param sftp

     /

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

        try {

            sftpcd(directory);

            File file = new File(uploadFile);

            sftpput(new FileInputStream(file), filegetName());

        } catch (Exception e) {

            eprintStackTrace();

        }

    }

    /

      下载文件

      

      @param directory

                 下载目录

      @param downloadFile

                 下载的文件

      @param saveFile

                 存在本地的路径

      @param sftp

     /

    public void download(String directory, String downloadFile,

            String saveFile, ChannelSftp sftp) {

        try {

            sftpcd(directory);

            sftpget(downloadFile,saveFile);

        } catch (Exception e) {

            eprintStackTrace();

        }

    }

    /

      删除文件

      

      @param directory

                 要删除文件所在目录

      @param deleteFile

                 要删除的文件

      @param sftp

     /

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

        try {

            sftpcd(directory);

            sftprm(deleteFile);

        } catch (Exception e) {

            eprintStackTrace();

        }

    }

    

    public void disconnected(ChannelSftp sftp){

        if (sftp != null) {

            try {

                sftpgetSession()disconnect();

            } catch (JSchException e) {

                eprintStackTrace();

            }

            sftpdisconnect();

        }

    }

}

我就是用sftp传输的,Android下,就是用手机录音,然后把录下来的音频文件保存到服务器里,给你源代码吧,

import javaioFile;

import javaioFileInputStream;

import javaioFileOutputStream;

import javautilDate;

import javautilProperties;

import javautilVector;

import androidcontentContext;

import androidtelephonyTelephonyManager;

import androidtextformatDateFormat;

import androidtextformatTime;

import comjcraftjschChannel;

import comjcraftjschChannelSftp;

import comjcraftjschJSch;

import comjcraftjschSession;

import comjcraftjschSftpException;

public class Sftp_upload {

 /

   连接sftp服务器

   @param host 主机

   @param port 端口

   @param username 用户名

   @param password 密码

   @return

  /

 public ChannelSftp connect(String host, int port, String username,String password) {

 

 ChannelSftp sftp = null;

  try {

   JSch jsch = new JSch();

   jschgetSession(username, host, port);

   Session sshSession = jschgetSession(username, host, port);

   Systemoutprintln("Session created");

   sshSessionsetPassword(password);

   Properties sshConfig = new Properties();

   sshConfigput("StrictHostKeyChecking", "no");

   sshSessionsetConfig(sshConfig);

   sshSessionconnect();

   Systemoutprintln("Session connected");

   Systemoutprintln("Opening Channel");

   Channel channel = sshSessionopenChannel("sftp");

   channelconnect();

   sftp = (ChannelSftp) channel;

   Systemoutprintln("Connected to " + host + "");

   //Systemoutprintln("登录成功");

  } catch (Exception e) {

  }

  return sftp;

 }

 /

   上传文件

   @param directory 上传的目录

   @param uploadFile 要上传的文件

   @param sftp

  /

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

  

 try {

   sftpcd(directory);

   File file=new File(uploadFile);

  

   String currentTime=DateFormatformat("yyyy_MM_dd_hh_mm_ss", new Date())toString(); //获取时间

   String filename=currentTime+"wav"; //文件名为当前时间来保存

   sftpput(new FileInputStream(file), filename);   

  

   Systemoutprintln("上传成功!");

} catch (Exception e) {

   eprintStackTrace();

  }

 }

 /

   下载文件

   @param directory 下载目录

   @param downloadFile 下载的文件

   @param saveFile 存在本地的路径

   @param sftp

  /

 public void download(String directory, String downloadFile,String saveFile, ChannelSftp sftp) {

  try {

   sftpcd(directory);

   File file=new File(saveFile);

   sftpget(downloadFile, new FileOutputStream(file));

  } catch (Exception e) {

   eprintStackTrace();

  }

 }

 /

   删除文件

   @param directory 要删除文件所在目录

   @param deleteFile 要删除的文件

   @param sftp

  /

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

 try {

   sftpcd(directory);

   sftprm(deleteFile);

  } catch (Exception e) {

   eprintStackTrace();

  }

 }

 /

   列出目录下的文件

   @param directory 要列出的目录

   @param sftp

   @return

   @throws SftpException

  /

 public Vector listFiles(String directory, ChannelSftp sftp) throws SftpException{

  

 return sftpls(directory);

 

 }

 

 //上传文件

 

 

 public static void Sftp_server(String file,String imsi) {

  String Imsi = imsi;  

  Sftp_upload sf = new Sftp_upload(); 

  String host = "192168160";

  int port = 22;

  String username = "root";

  String password = "123456";

  String directory = "/data/test/wav";

  //String uploadFile = "c:\\audiocheck\\testwav";

  String uploadFile = file;

 // String downloadFile = "/data/test/wav/lamesh";

// String saveFile = "c:\\audiocheck\\contenttxt";

 // String deleteFile = "c:\\audiocheck\\contenttxt";

  ChannelSftp sftp=sfconnect(host, port, username, password);

  

  //sfdownload(directory, downloadFile, saveFile, sftp);

  //sfdelete(directory, deleteFile, sftp);

   try{

   sftpcd(directory);

   sftpmkdir(Imsi); //创建目录

   Systemoutprintln("finished");

  }catch(Exception e){

  eprintStackTrace();

  }

  directory = "/data/test/wav/"+imsi;

  sfupload(directory, uploadFile, sftp);//上传文件到服务器

 

 }

 

}

这个就是源代码,

然后上传的时候用的代码

//imsi也就是 手机的型号来创建文件夹的,这些你都可以修改的。

String file = mWorkdir+"/"+"resFilewav"; //要上传的文件

Sftp_uploadSftp_server(file,imsi); //上传文件

Systemoutprintln("已上传");

1、无法执行多条命令,每次ChannelExec在connect前要先setCommand,最后一次的设置生效。

2、由于第一个原因的限制,如果执行的命令需要环境变量(如JAVA_HOME),就没有办法了。这种方式执行基本的ls,ps之类的命令没有问题,需要复杂的环境变量时有点力不从心。

如果你的JAVA部署的tomcat,就是你要查找文件的服务器,那就用:

File file = new File("文件路径")。

如果你本地的JAVA想要访问远程的一个服务器的文件是否存在,就得用如下方法:

URL url = new URL(“文件路径:可以是本地服务器的路径,也可以是远程服务器的路径”)

>

//message = urlcongetHeaderField(0);

//文件存在‘>

Long TotalSize=LongparseLong(urlcongetHeaderField("Content-Length"));

if (TotalSize>0){

return true;

}else{

return false;

}

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

>

如何在windows获取linux服务器上的文件,之前的一篇博客以及提到可以利用Jsch实现ssh来进行远程获取,这篇主要讲利用Apache配置>

以上就是关于Apache SSHD实现SFTP服务端,客户端访问进行远程文件上传下载全部的内容,包括:Apache SSHD实现SFTP服务端,客户端访问进行远程文件上传下载、你好!我也碰到了SFTP传输,纯java可以,Android就不行,纠结好几天了,希望你能尽快帮我解答,谢谢!、Java使用JSch,ChannelExec取不到结果,在while(true)中死循环。ChannelShell结果难处理,求指点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9320159.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存