2010-02-12 12 views

risposta

5

Io uso andFTP per i trasferimenti sftp ma non è open source.

È possibile verificare connectBot. C'è un problema a sftp transfers.

+0

Hi Macarse si thnk vostra risposta. Sono passato attraverso il client open source connectbolt SSH su Android. Ora voglio chiedere se posso integrare FTP e connectbolt SSH per formare il mio SFTP ?? Quanto possibile sarebbe considerare che non conosco molto di internals di SSH. Grazie in anticipo. –

+0

Penso che lo aggiungeranno, ma non c'è ancora. Pubblica un commento sul problema e chiedile di uscire. – Macarse

4

Sì, edtFTPj/PRO è una libreria Java commerciale che funziona su Android e supporta SFTP (oltre a FTP e FTPS).

0

È possibile utilizzare jsch.

Gradle:

compile group: 'com.jcraft', name: 'jsch', version: '0.1.54' 

Proguard (io tenerlo pubblico e ignorare gli avvisi soluzione facile, eccessivo scelgo di non pasticciare con essa qui..). Se conosci la soluzione corretta, fammelo sapere. Codice

-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(); 
}