2013-02-22 3 views
5

Если кто-нибудь знает быстрый способ получить удаленный файл, напрямую передающий его в файл-файл, поэтому нет необходимости хранить файл временно на компьютере, это было бы очень полезно! До сих пор я скопировать файл с удаленного КСН-устройства следующим образом (с использованием net.schmizz.sshj):Потоковая передача удаленных файлов в файловые объекты

SSHClient ssh = new SSHClient(); 
ssh.addHostKeyVerifier(fingerprint); 
ssh.connect(ip); 

try { 
    ssh.authPassword("username", "userpassword".toCharArray()); 
    ssh.newSCPFileTransfer().download(fileRemote, new FileSystemFile(fileLocal)); 
} catch (IOException ioe) { 
    ioe.printStackTrace(); 
} finally { 
    ssh.disconnect(); 
} 

Если есть кто-нибудь, кто заинтересован в коде решения:

As Как упоминалось в его ответе, лучше использовать InMemoryDestFile. Итак, создайте следующий класс:

class MyInMemoryDestFile extends InMemoryDestFile { 
    public ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 

    @Override 
    public ByteArrayOutputStream getOutputStream() throws IOException { 
     return this.outputStream; 
    } 
} 

... в вашем методе, где вы выполняете операцию загрузки создать экземпляр нового класса:

MyInMemoryDestFile a = new StreamingInMemoryDestFile(); 

и доступ к OutputStream:

ssh.newSCPFileTransfer().download(remoteFile, a); 
a.getOutputStream().toByteArray(); 

С наилучшими пожеланиями

ответ