Chcę używać SFTP w moim projekcie Android. Czy Android ma już bibliotekę SFTP , czy muszę ją wdrożyć?Biblioteka Android STFP
10
A
Odpowiedz
5
Używam andFTP dla transferów sftp, ale to nie jest open source.
Możesz sprawdzić connectBot. Wystąpił problem dotyczący sftp transfers.
4
Tak, edtFTPj/PRO to komercyjna biblioteka Java, która działa na systemie Android i obsługuje SFTP (a także FTP i FTPS).
0
Można użyć jsch.
Gradle:
compile group: 'com.jcraft', name: 'jsch', version: '0.1.54'
Proguard (ja trzymam go ignorować ostrzeżeń publicznych i proste rozwiązanie, przesadą wybiorę nie zadzierać z nim tutaj..). Jeśli znasz poprawne rozwiązanie - daj mi znać. Kod
-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();
}
Hi Macarse thnk Ci odpowiedź. Przeszedłem przez klienta openbolowego SSH connectbolt na Androidzie. Teraz chcę zapytać, czy mogę zintegrować FTP i połączyć SSH, aby utworzyć mój SFTP ?? O ile to możliwe, biorąc pod uwagę, że nie znam zbyt wielu wewnętrznych elementów SSH. Z góry dzięki. –
Myślę, że dodadzą go, ale jeszcze go nie ma. Opublikuj komentarz na temat problemu i poproś go o pomoc. – Macarse