-1
我有一个包含上传文件链接的JSP页面。最初,文件传输是使用FTP进行的。服务器似乎只使用FTP从客户端传输文件。我需要现在更改代码以支持SFTP。与服务器在客户端计算机上启动FTP会话一样,是否也可以使用SFTP?这里是客户端代码:JSP文件上传。从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 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();
不,我的意思是SFTP(通过SSH的FTP)。实际上我托管我的应用程序的http服务器不支持SFTP。但还有另一个SFTP服务器,我想要将这个文件上传到。为此我需要在服务器上做什么样的设置。 – learner420
@ learner420:HTTP服务器不支持SSH,因为HTTP和SSH是不同的协议。对于SFTP/SSH,您需要安装和设置SSH服务器。你有什么选择取决于你的(未知)服务器操作系统。也许只是为您的平台搜索SSH/SFTP服务器。 –
嗯,我有一个SFTP服务器,我想上传这个文件,它不同于HTTP服务器。我正在使用HTTP服务器来托管该jsp,从中我想要获取该文件的所有详细信息,然后启动到该(SFTP)服务器的SFTP传输。 – learner420