我想在我的 Android 项目中使用 SFTP。Android 是否已经有 SFTP 库,还是我必须实现它?
问问题
16883 次
3 回答
5
我使用andFTP进行 sftp 传输,但它不是开源的。
您可以检查connectBot。存在关于sftp 传输的问题。
于 2010-02-12T11:07:31.230 回答
4
是的,edtFTPj/PRO是一个商业 Java 库,可在 Android 上运行并支持 SFTP(以及 FTP 和 FTPS)。
于 2010-02-15T11:58:02.863 回答
4
您可以使用jsch。
摇篮:
compile group: 'com.jcraft', name: 'jsch', version: '0.1.54'
Proguard(我确实将其公开并忽略警告。简单的解决方案,矫枉过正。我选择不在这里弄乱它)。如果您知道正确的解决方案 - 请告诉我。
-keep class com.jcraft.jsch.jce.*
-keep class * extends com.jcraft.jsch.KeyExchange
-keep class com.jcraft.jsch.**
-keep class com.jcraft.jzlib.**
-keep class com.jcraft.jsch.jce.*
-keep class com.jcraft.jzlib.ZStream
-keep class com.jcraft.jsch.Compression
-keep class org.ietf.jgss.*
-dontwarn org.ietf.jgss.**
-dontwarn com.jcraft.jsch.**
代码:
// add correct exception-handling; remember to close connection in all cases
public void doUpload(String host, String user, String password, String folder, int port, File file){
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, port);
session.setPassword(password);
java.util.Properties config = new java.util.Properties();
//Don't do it on Production -- makes it MITM-vulnerable
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.setTimeout(5000);
session.setConfig("PreferredAuthentications", "password");
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp channelSftp = (ChannelSftp) channel;
String home = channelSftp.getHome();
if (folder == null || folder.length() == 0 || "/".equals(folder)) {
folder = home;
} else {
File file = new File(new File(home), folder);
folder = file.getPath();
}
channelSftp.cd(folder);
try (BufferedInputStream buffIn = new BufferedInputStream(new FileInputStream(file.getPath()))) {
ProgressInputStream progressInput = new ProgressInputStream(buffIn, progressListener, file.length());
channelSftp.put(progressInput, file.getName());
}
channelSftp.disconnect();
session.disconnect();
}
于 2017-10-25T05:54:31.143 回答