Вместо моего локального каталога я хочу перенести файлы из хранилища GCP на удаленный сервер через SFTP в java с помощью JSch или скрипта.
try{
JSch jsch = new JSch();
jsch.addIdentity(privateSftpKey);
session = jsch.getSession(SFTPUSER, SFTPHOST, SFTPPORT);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
log.info("Host connected.");
channel = session.openChannel("sftp");
channel.connect();
log.info("sftp channel opened and connected.");
channelSftp = (ChannelSftp) channel;
String sftpDirectory = "/home/share";
File directory = new File("C:\\Users\\XYZ\\Desktop\\Learning\\Projects\\TransferStorageBucketToRemoteServer");
File[] fList = directory.listFiles();
for (File file : fList){
if (file.isFile()){
String filename=file.getAbsolutePath();
channelSftp.put(filename, sftpDirectory, ChannelSftp.OVERWRITE);
System.out.println(filename + " transferred to " + sftpDirectory );
}
}
log.info("File transfered successfully to host.");
} catch (Exception ex) {
log.info("Exception found while tranfer the response.");
log.info("Exception Message...: {}",ex.getMessage());
}
Когда я ищу в inte rnet, передача файлов только из
- сегмента хранилища в другой сегмент хранилища или
- сегмента хранилища в локальный каталог и наоборот
код API облачного хранилища Google, чтение файлы из хранилища
Credentials credentials = GoogleCredentials
.fromStream(new FileInputStream(jsonKey));
Storage storage = StorageOptions.newBuilder().setCredentials(credentials)
.setProjectId("projectId").build().getService();
Blob blob = storage.get("bucket-name", "file.txt");
ReadChannel readChannel = blob.reader();
Но не знаю, как загрузить его в канал SFTP напрямую из GCP ReadChannel, не записывая его в другой выходной файл, а затем передавая его в канал SFTP
channelSftp.put(file_from_readChannel , sftpDirectory, ChannelSftp.OVERWRITE);
Но я не вижу передачи из ведра хранения непосредственно на удаленный сервер.
Может ли кто-нибудь помочь в этом и возможный способ сделать это с помощью java или команд?