2013-02-22 6 views
5

Wenn jemand einen schnellen Weg weiß, wie man eine Remote-Datei direkt in ein Dateiobjekt streamt, so ist es nicht notwendig, die Datei temporär auf einem Computer zu speichern, es wäre sehr zu schätzen! Bis jetzt kopiere ich die Datei von einem Remote-ios-Gerät wie (mit net.schmizz.sshj) folgt:Streamen von Remote-Dateien in Dateiobjekte

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

Wenn es jemanden, der im Code der Lösung interessiert ist:

Wie Nutlike erwähnt in seiner Antwort ist es besser, InMemoryDestFile zu verwenden. So die folgende Klasse erstellen:

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

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

... in Ihrer Methode, wo Sie den Download-Vorgang durchführen eine Instanz der neuen Klasse zu erstellen:

MyInMemoryDestFile a = new StreamingInMemoryDestFile(); 

und Zugriff auf den Output:

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

mit freundlichen Grüßen

Antwort