JSP文件上传。从FTP到SFTP的转换 [英] JSP file upload. Conversion from FTP to SFTP

查看:203
本文介绍了JSP文件上传。从FTP到SFTP的转换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个JSP页面,其中包含一个上传文件的链接。最初文件传输是使用FTP进行的。服务器似乎只使用FTP从客户端传输文件。我需要现在更改代码以支持SFTP。就像服务器在客户端机器上启动FTP会话一样,SFTP也可以吗?这里是客户端代码:

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();


推荐答案


客户机上的FTP会话,SFTP也可以吗?这里是客户端代码:

Like the server initiated an FTP session on the client machine, is it possible for SFTP as well? here is the client code:

SFTP是一个完全不同于FTP的协议,您可能无法重用任何FTP特定的代码。这可能是你的意思是FTPS而不是TLS的FTP扩展。如果支持,则取决于服务器的设置,即仅更改客户端代码是不够的。只要服务器支持它,您就可以在Java中使用它,例如使用org.apache.commons.net.ftp.FTPClient保护FTP

SFTP is a completely different protocol than FTP and you probably cannot reuse any FTP specific code. It might be that you've meant FTPS instead which is FTP extended with TLS. If this is supported depends on the setup of the server, that is it is not enough to only change the client code. As long as the server supports it you can use it with Java, see for example Secure FTP with org.apache.commons.net.ftp.FTPClient

这篇关于JSP文件上传。从FTP到SFTP的转换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆