Add download files functionality
This commit is contained in:
parent
a9b06d3fb3
commit
a36aa49f37
2 changed files with 128 additions and 0 deletions
125
DownloadFiles.java
Normal file
125
DownloadFiles.java
Normal file
|
|
@ -0,0 +1,125 @@
|
|||
package handleSsh;
|
||||
|
||||
import com.jcraft.jsch.*;
|
||||
import java.util.ArrayList;
|
||||
import java.io.File;
|
||||
|
||||
|
||||
public class DownloadFiles {
|
||||
|
||||
private static final String LOCAL_BASIC_PATH = "/home/rasta5man/dev/oms/downloads/";
|
||||
|
||||
//ADD FILES TO DOWNLOAD IN MAIN METHOD
|
||||
private static ArrayList<String> filesToDownload = new ArrayList<>();
|
||||
|
||||
|
||||
|
||||
public static void main(String[] args) throws JSchException {
|
||||
|
||||
ArrayList<Server> allServers = new BuildServerArray().getAllServers();
|
||||
|
||||
for (Server server : allServers) {
|
||||
|
||||
String remoteBasicPath = "";
|
||||
if(server.getUsername().equals("root")) { // je to LM
|
||||
remoteBasicPath = "/root/flowserver/";
|
||||
}
|
||||
else {
|
||||
remoteBasicPath = "/home/unipi/flowserver/";
|
||||
}
|
||||
|
||||
|
||||
filesToDownload.clear();
|
||||
filesToDownload.add(remoteBasicPath + "databases/nodes.table");
|
||||
// filesToDownload.add(remoteBasicPath + "databases/settings.table");
|
||||
|
||||
|
||||
System.out.println("Connecting to server: " + server);
|
||||
downloadFiles(server);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Establishes SFTP connection and downloads files.
|
||||
*/
|
||||
public static void downloadFiles(Server server) throws JSchException {
|
||||
|
||||
JSch jsch = new JSch();
|
||||
jsch.setKnownHosts("/home/rasta5man/.ssh/known_hosts");
|
||||
jsch.addIdentity( "/home/rasta5man/.ssh/oms_key" );
|
||||
Session session = null;
|
||||
ChannelSftp sftpChannel = null;
|
||||
|
||||
try {
|
||||
|
||||
session = jsch.getSession(server.getUsername(), server.getHost(), server.getPort());
|
||||
session.setPassword(server.getPassword());
|
||||
//session.setConfig("StrictHostKeyChecking", "no"); // Avoids checking for new host keys (not recommended for production)
|
||||
session.connect();
|
||||
|
||||
sftpChannel = (ChannelSftp) session.openChannel("sftp");
|
||||
sftpChannel.connect();
|
||||
|
||||
for (String fileToDownload : filesToDownload) {
|
||||
System.out.println("Downloading " + fileToDownload + " to " + server);
|
||||
|
||||
// 3. Perform the file download
|
||||
System.out.println("Attempting to download remote file: " + fileToDownload);
|
||||
|
||||
String localFileName = getFileName(fileToDownload);
|
||||
File localFile = new File(LOCAL_BASIC_PATH + localFileName + server.getHost());
|
||||
|
||||
// JSch's get() method downloads the remote file to the local path
|
||||
sftpChannel.get(fileToDownload, localFile.getAbsolutePath());
|
||||
System.out.println("\n✅ Success! File downloaded to: " + localFile.getAbsolutePath());
|
||||
}
|
||||
|
||||
} catch (JSchException e) {
|
||||
// Handle connection, authentication, or channel opening errors
|
||||
System.err.println("\n❌ SFTP Connection Error: " + e.getMessage());
|
||||
e.printStackTrace();
|
||||
} catch (SftpException e) {
|
||||
// Handle file-specific errors (e.g., file not found, permission denied)
|
||||
System.err.println("\n❌ SFTP File Transfer Error: " + e.getMessage() + " (Error code: " + e.id + ")");
|
||||
System.err.println("Please check if the remote file path exists and permissions are correct.");
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
// 4. Clean up resources
|
||||
if (sftpChannel != null && sftpChannel.isConnected()) {
|
||||
sftpChannel.disconnect();
|
||||
System.out.println("SFTP Channel disconnected.");
|
||||
}
|
||||
if (session != null && session.isConnected()) {
|
||||
session.disconnect();
|
||||
System.out.println("Session disconnected.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Extracts the filename from a given file path string.
|
||||
* It assumes a Unix-style path separator ('/'), which is standard for SFTP.
|
||||
*
|
||||
* @param path The full file path (e.g., "/home/george/pictures/downtown.jpg").
|
||||
* @return The filename (e.g., "downtown.jpg"). Returns an empty string if the input is null or empty.
|
||||
*/
|
||||
public static String getFileName(String path) {
|
||||
if (path == null || path.isEmpty()) {
|
||||
return "";
|
||||
}
|
||||
int lastSeparatorIndex = path.lastIndexOf('/');
|
||||
|
||||
// If the path contains a separator, return the substring after it.
|
||||
// Otherwise, the entire path is considered the filename.
|
||||
return (lastSeparatorIndex == -1)
|
||||
? path
|
||||
: path.substring(lastSeparatorIndex + 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
3
README
3
README
|
|
@ -1,6 +1,7 @@
|
|||
POUZITIE:
|
||||
|
||||
Pocitame iba s dvomi pripadmi: bud je zariadenie LM alebo unipi, to znamena, bud je user "root" alebo "unipi".
|
||||
Dalsi predpoklad spravneho fungovania je, ze uzivatel, ktory sa pripaja na unipi zariadenie tam ma svoj ssh kluc uz nahraty.
|
||||
|
||||
1. v "buildServerArray.java" si doplnte zariadenia, na ktore sa chcete cez ssh prihlasit: "server.put(ip, username)"
|
||||
dole v subore takisto doplnte prihlasovacie hesla pre jednotlive zariadenia: "rvoPassword.put(ip, heslo)"
|
||||
|
|
@ -9,6 +10,8 @@ tak isto nezabudnite nastavit cas medzi jednotlivymi pripajaniami na zariadenia
|
|||
3. ked chcete hromadny upload suborov, pouzite subor "UploadFiles.java". V prvom rade nastavte "BASIC_PATH" - adresar v ktorom su subory na upload.
|
||||
DOLEZITE: adresar v ktorom su subory sa musi volat na konci "flowserver" a koncit lomitkom. (moze mat predtym text, ale koniec musi byt flowserver - napr "city-flowserver/"
|
||||
Ak chcete menit ine subory na unipi alebo lm, ako flowserver, musite nastavit "directoryToUpload"
|
||||
4. ked chcete hromadny download suborov, pouzite subor "DownloadFiles.java". Nastavte "LOCAL_BASIC_PATH" - adresar, kde sa subory stiahnu.
|
||||
Dalej v metode "main" pridajte subory, ktore chcete stiahnut. Treba zadat cestu k suboru v "FLOWSERVER" adresari.
|
||||
|
||||
|
||||
5.5.2025 ->
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue