I have a JSP page which contains a link to upload a file. Initially the file transfer was happening using FTP. The server seems to transfer the file from client using the FTP only. I require to change the code to support SFTP now. Like the server initiated an FTP session on the client machine, is it possible for SFTP as well? here is the client code:
FTPClient client = new FTPClient();
FTPClient clientUser = new FTPClient(); //From ftp location (user saves file here)
try { //Location where user chooses file from
eas_user_import_ip_address_val = resovleJNDIResource.resolveJNDIString(eas_user_import_ip_address_tx);
eas_user_import_id_val = resovleJNDIResource.resolveJNDIString(eas_user_import_id_tx);
eas_user_import_pwd_val = resovleJNDIResource.resolveJNDIString(eas_user_import_pwd_tx);
eas_user_file_prefix_val= resovleJNDIResource.resolveJNDIString(eas_user_file_prefix_tx);
eas_user_file_prefix_val= eas_user_file_prefix_val.trim();
clientUser.connect(eas_user_import_ip_address_val);
int replyUser = clientUser.getReplyCode();
if(!FTPReply.isPositiveCompletion(replyUser)) {
ENTADJRuntime.getInstance().logError("FTPService", "Error connecting to:" + eas_user_import_ip_address_val + " reply code:" + replyUser);
clientUser.disconnect();
return false;
}
boolean loginUser = clientUser.login(eas_user_import_id_val, eas_user_import_pwd_val);
if (!loginUser) {
ENTADJRuntime.getInstance().logError("FTPService", "Error logging in to:" + eas_user_import_id_val);
return false;
}
//Location where file gets copied to.
eas_import_ip_address_val = resovleJNDIResource.resolveJNDIString(eas_import_ip_address_tx);
eas_import_id_val = resovleJNDIResource.resolveJNDIString(eas_import_id_tx);
eas_import_pwd_val = resovleJNDIResource.resolveJNDIString(eas_import_pwd_tx);
eas_part_file_prefix_val = resovleJNDIResource.resolveJNDIString(eas_part_file_prefix_tx);
eas_p2p_file_prefix_val = resovleJNDIResource.resolveJNDIString(eas_p2p_file_prefix_tx);
client.connect(eas_import_ip_address_val);
int reply = client.getReplyCode();
if(!FTPReply.isPositiveCompletion(reply)) {
ENTADJRuntime.getInstance().logError("FTPService", "Error connecting to:" + eas_import_ip_address_val + " reply code:" + reply);
client.disconnect();
return false;
}
boolean login = client.login(eas_import_id_val, eas_import_pwd_val);
if (!login) {
ENTADJRuntime.getInstance().logError("FTPService", "Error loging in to:" + eas_import_id_val);
return false;
}
//Loged in to From and To locations. Now transfer file
clientUser.setFileType(FTP.ASCII_FILE_TYPE);
clientUser.enterLocalActiveMode(); //from example
String originalFileName = fileName;
fileName = eas_user_file_prefix_val+fileName;
InputStream ip = clientUser.retrieveFileStream(fileName);
String issueIdStr = StringHelper.prepad(issueId + "", 10, '0');
String headerRecord = "HEADER " + adjPlatformCd + issueIdStr + batchId + " Original file : " + fileName;
String trailerRecord = "TRAILER " + adjPlatformCd + issueIdStr + batchId + " Server file : " + eas_file_prefix_val + dt_tm_siz + ".csv";
client.setFileType(FTP.ASCII_FILE_TYPE);
//First store file as ".tmp". First header then data followed by trailer
boolean retValue = client.storeFile(eas_file_prefix_val + dt_tm_siz + ".tmp", new ByteArrayInputStream(headerRecord.getBytes()));
if (!retValue) {
ENTADJRuntime.getInstance().logError("FTPService", "Error creating:" + eas_file_prefix_val + dt_tm_siz + ".tmp");
return false;
}
retValue = client.appendFile(eas_file_prefix_val + dt_tm_siz + ".tmp", ip);
if (!retValue) {
ENTADJRuntime.getInstance().logError("FTPService", "Error append 1:" + eas_file_prefix_val + dt_tm_siz + ".tmp");
return false;
}
ip.close();
retValue = client.appendFile(eas_file_prefix_val + dt_tm_siz + ".tmp", new ByteArrayInputStream(trailerRecord.getBytes()));
if (!retValue) {
ENTADJRuntime.getInstance().logError("FTPService", "Error append 2:" + eas_file_prefix_val + dt_tm_siz + ".tmp");
return false;
}
boolean commandOK=clientUser.completePendingCommand(); // this command lets next few ftp commands proces successfully
// place user file in PROCESSED folder. Append issue id, batch #, date and time if file length is < 230
String renamedUserFileName = eas_user_file_prefix_val+ "PROCESSED\\" + originalFileName.substring(0, originalFileName.lastIndexOf(".csv")) + "_" + issueId + "_" + batchId.trim() + dt_tm_siz + ".csv";
String someSiteCommand = "RNFR " + fileName; //rename from
reply = clientUser.sendCommand(someSiteCommand);
someSiteCommand = "RNTO " + renamedUserFileName; //rename to
reply = clientUser.sendCommand(someSiteCommand);
if(!FTPReply.isPositiveCompletion(reply)) {
ENTADJRuntime.getInstance().logError("FTPService", "Error renaming:" + fileName + " reply code:" + reply);
return false;
}
someSiteCommand = "RNFR " + eas_file_prefix_val + dt_tm_siz + ".tmp"; //rename from
reply = client.sendCommand(someSiteCommand);
someSiteCommand = "RNTO " + eas_file_prefix_val + dt_tm_siz + ".csv"; //rename to
reply = client.sendCommand(someSiteCommand);
if(!FTPReply.isPositiveCompletion(reply)) {
ENTADJRuntime.getInstance().logError("FTPService", "Error renaming:" + eas_file_prefix_val + dt_tm_siz + ".tmp" + " reply code:" + reply);
return false;
}
client.logout();
clientUser.logout();