Как получить файл с сервера через SFTP?

В случае создания экземпляра экземпляр нестационарного внутреннего класса создается с ссылкой на объект внешнего класса, в котором он определен. Это означает, что у него есть инклюзивный экземпляр. Но экземпляр статического внутреннего класса создается со ссылкой на класс Outer, а не ссылкой на объект внешнего класса. Это означает, что он не включает экземпляр.

Например:

class A
{
  class B
  {
    // static int x; not allowed here…..    
  }
  static class C
  {
    static int x; // allowed here
  }
}

class Test
{
  public static void main(String… str)
  {
    A o=new A();
    A.B obj1 =o.new B();//need of inclosing instance

    A.C obj2 =new A.C();

    // not need of reference of object of outer class….
  }
}
223
задан TylerH 10 January 2017 в 06:24
поделиться

10 ответов

Другая опция состоит в том, чтобы рассмотреть рассмотрение библиотека JSch . JSch, кажется, предпочтительная библиотека для нескольких больших проектов с открытым исходным кодом, включая Eclipse, Муравья и Apache палата общин HttpClient, среди других.

Это поддерживает и пользователя/передачу и основанные на сертификате логины приятно, а также весь большое количество других вкусных функций SSH2.

Вот простой удаленный файл, получают по SFTP. Обработку ошибок оставляют как осуществление для читателя:-)

JSch jsch = new JSch();

String knownHostsFilename = "/home/username/.ssh/known_hosts";
jsch.setKnownHosts( knownHostsFilename );

Session session = jsch.getSession( "remote-username", "remote-host" );    
{
  // "interactive" version
  // can selectively update specified known_hosts file 
  // need to implement UserInfo interface
  // MyUserInfo is a swing implementation provided in 
  //  examples/Sftp.java in the JSch dist
  UserInfo ui = new MyUserInfo();
  session.setUserInfo(ui);

  // OR non-interactive version. Relies in host key being in known-hosts file
  session.setPassword( "remote-password" );
}

session.connect();

Channel channel = session.openChannel( "sftp" );
channel.connect();

ChannelSftp sftpChannel = (ChannelSftp) channel;

sftpChannel.get("remote-file", "local-file" );
// OR
InputStream in = sftpChannel.get( "remote-file" );
  // process inputstream as needed

sftpChannel.exit();
session.disconnect();
196
ответ дан Cheekysoft 23 November 2019 в 04:00
поделиться

Лучшее решение, которое я нашел, Paramiko. Существует версия Java.

0
ответ дан Brian Clapper 23 November 2019 в 04:00
поделиться

У Вас также есть JFileUpload с дополнением SFTP (Java также): http://www.jfileupload.com/products/sftp/index.html

1
ответ дан 23 November 2019 в 04:00
поделиться

Хорошая абстракция сверху Jsch является Apache свободное-городское-население-vfs , который предлагает API виртуальной файловой системы, который делает доступ и запись файлов SFTP почти прозрачными. Работавший хорошо для нас.

23
ответ дан Boris Terzic 23 November 2019 в 04:00
поделиться

Это было решением, которое я предложил http://sourceforge.net/projects/sshtools/ (большая часть обработки ошибок, опущенной для ясности). Это - выборка от мой блог

SshClient ssh = new SshClient();
ssh.connect(host, port);
//Authenticate
PasswordAuthenticationClient passwordAuthenticationClient = new PasswordAuthenticationClient();
passwordAuthenticationClient.setUsername(userName);
passwordAuthenticationClient.setPassword(password);
int result = ssh.authenticate(passwordAuthenticationClient);
if(result != AuthenticationProtocolState.COMPLETE){
     throw new SFTPException("Login to " + host + ":" + port + " " + userName + "/" + password + " failed");
}
//Open the SFTP channel
SftpClient client = ssh.openSftpClient();
//Send the file
client.put(filePath);
//disconnect
client.quit();
ssh.disconnect();
23
ответ дан David Hayes 23 November 2019 в 04:00
поделиться

Попробуйте edtFTPj / PRO , зрелую, надежную клиентскую библиотеку SFTP, которая поддерживает пулы соединений и асинхронные операции. Также поддерживает протоколы FTP и FTPS, что позволяет использовать все основы безопасной передачи файлов.

2
ответ дан 23 November 2019 в 04:00
поделиться

Я использую этот SFTP API под названием Zehon, он великолепен, настолько прост в использовании, с большим количеством примеров кода. Вот сайт http://www.zehon.com

1
ответ дан 23 November 2019 в 04:00
поделиться

hierynomus/sshj имеет полную реализацию SFTP версии 3 (что реализует OpenSSH)

Пример кода из SFTPUpload.java

package net.schmizz.sshj.examples;

import net.schmizz.sshj.SSHClient;
import net.schmizz.sshj.sftp.SFTPClient;
import net.schmizz.sshj.xfer.FileSystemFile;

import java.io.File;
import java.io.IOException;

/** This example demonstrates uploading of a file over SFTP to the SSH server. */
public class SFTPUpload {

    public static void main(String[] args)
            throws IOException {
        final SSHClient ssh = new SSHClient();
        ssh.loadKnownHosts();
        ssh.connect("localhost");
        try {
            ssh.authPublickey(System.getProperty("user.name"));
            final String src = System.getProperty("user.home") + File.separator + "test_file";
            final SFTPClient sftp = ssh.newSFTPClient();
            try {
                sftp.put(new FileSystemFile(src), "/tmp");
            } finally {
                sftp.close();
            }
        } finally {
            ssh.disconnect();
        }
    }

}
7
ответ дан 23 November 2019 в 04:00
поделиться

Ниже приведен пример использования общей VFS Apache:

FileSystemOptions fsOptions = new FileSystemOptions();
SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(fsOptions, "no");
FileSystemManager fsManager = VFS.getManager();
String uri = "sftp://user:password@host:port/absolute-path";
FileObject fo = fsManager.resolveFile(uri, fsOptions);
43
ответ дан 23 November 2019 в 04:00
поделиться

Вот полный исходный код примера с использованием JSch , не беспокоясь о проверке ключа ssh.

import com.jcraft.jsch.*;

public class TestJSch {
    public static void main(String args[]) {
        JSch jsch = new JSch();
        Session session = null;
        try {
            session = jsch.getSession("username", "127.0.0.1", 22);
            session.setConfig("StrictHostKeyChecking", "no");
            session.setPassword("password");
            session.connect();

            Channel channel = session.openChannel("sftp");
            channel.connect();
            ChannelSftp sftpChannel = (ChannelSftp) channel;
            sftpChannel.get("remotefile.txt", "localfile.txt");
            sftpChannel.exit();
            session.disconnect();
        } catch (JSchException e) {
            e.printStackTrace();  
        } catch (SftpException e) {
            e.printStackTrace();
        }
    }
}
107
ответ дан 23 November 2019 в 04:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: