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