就像服务器在客户端计算机上启动FTP会话一样,SFTP是否也可能?这是客户端代码:
SFTP是与FTP完全不同的协议,您可能无法重用任何FTP特定代码。可能是您的意思是FTPS,它是使用TLS扩展的FTP。如果支持此操作取决于服务器的设置,那就是仅更改客户端代码是不够的。只要服务器支持它,您就可以将其与Java一起使用,例如,参见带有org.apache.commons.net.ftp.FTPClient的SecureFTP。
解决方法我有一个JSP页面,其中包含一个上传文件的链接。最初,文件传输是使用FTP进行的。服务器似乎仅使用FTP从客户端传输文件。我现在需要更改代码以支持SFTP。就像服务器在客户端计算机上启动FTP会话一样,SFTP是否也可能?这是客户端代码:
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 fileclientUser.setFileType(FTP.ASCII_FILE_TYPE);clientUser.enterLocalActiveMode(); //from exampleString 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 trailerboolean 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 < 230String 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 fromreply = clientUser.sendCommand(someSiteCommand);someSiteCommand = 'RNTO ' + renamedUserFileName; //rename toreply = 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 fromreply = client.sendCommand(someSiteCommand);someSiteCommand = 'RNTO ' + eas_file_prefix_val + dt_tm_siz + '.csv'; //rename toreply = 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();