No data

I ran into a problem when it seems that my FTP connection is correct and no errors were received, but the file is not hosted on the ftp server.

I am using commons-net-ftp.

code:

int retCode = 0; FTPClient client = new FTPClient(); client.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out))); InputStream input = null; try { int replyCode; client.connect(pHostName); replyCode = client.getReplyCode(); if (!FTPReply.isPositiveCompletion(replyCode)) { client.disconnect(); logInfo("ftpFile() - FTP Server refused connection"); retCode = 1; } else { if(client.login(pUserName, pPassword)) { //default is FTP.ASCII_FILE_TYPE if(this.isBinaryTransfer()) { client.setFileType(FTP.BINARY_FILE_TYPE); } // Use passive mode as default because most of us are // behind firewalls these days. client.enterLocalPassiveMode(); input = new FileInputStream(pLocalFileName); if(this.isRemoveRemoteFile()) { client.deleteFile(pRemoteFileName); client.getReply(); this.logReplyStringInfo(client.getReplyStrings(), "Removing Remote File"); } if(this.isOverwriteFile()) { replyCode = client.sendCommand("-O"); this.logReplyStringInfo(client.getReplyStrings(), "Overwrite File"); } if(!client.storeFile(pRemoteFileName, input)) { logError("ftpFile() - Not able to store the file on the server" ); retCode = 6; } input.close(); client.logout(); client.disconnect(); } else { client.logout(); client.disconnect(); retCode = 3; } } } catch (FileNotFoundException fileNotFoundException) { logError("ftpFile(String, String, String, String, String)", fileNotFoundException); //$NON-NLS-1$ fileNotFoundException.printStackTrace(); retCode = 5; } catch (FTPConnectionClosedException e) { logError("ftpFile(String, String, String, String, String)", e); //$NON-NLS-1$ retCode = 4; e.printStackTrace(); } catch (IOException e) { logError("ftpFile(String, String, String, String, String)", e); //$NON-NLS-1$ e.printStackTrace(); e.printStackTrace(); retCode = 2; } finally { if (client.isConnected()) { try { if(null != input) { input.close(); } client.disconnect(); } catch (IOException f) { logWarning("ftpFile(String, String, String, String, String) - exception ignored", f); //$NON-NLS-1$ } } } 

Trace log file:

2010-10-12 10: 57: 53,527 INFO [STDOUT] 230 Forgot successfully
2010-10-12 10: 57: 53 527 INFO [STDOUT] PASV
2010-10-12 10: 57: 53 576 INFO [STDOUT] 227 Entering passive mode (216,27,89,17,10,231)
2010-10-12 10: 57: 53,624 INFO [STDOUT] STOR SharperImageFeed2.txt
2010-10-12 10: 57: 53,681 INFO [STDOUT] File 150 "/SharperImageFeed2.txt" is ready to receive in ASCII mode
2010-10-12 10: 57: 54,337 INFO [STDOUT] 226 Translation completed successfully.
2010-10-12 10: 57: 54,337 INFO [STDOUT] QUIT
2010-10-12 10: 57: 54,384 INFO [STDOUT] 221 Windows FTP Server (WFTPD by Texas Imperial Software) says goodbye

Any suggestions as to what is the issue? Any test that can be run?

I can upload ftp and upload a file using FileZilla.


By doing further testing, I can execute a successful FTP post when starting from my local dev env - which is Windows (Eclipse / JBoss). But when FTP is started from the production server (Linux / JBoss), the trace indicates that it is successful, but nothing is placed on the FTP server.

+4
source share
1 answer

Several Commons FTP commands require you to call completePendingCommand:

  if(!client.completePendingCommand()) { client.logout(); client.disconnect(); System.err.println("File transfer failed."); System.exit(1); } 

Try adding above after storeFile. More details here:

http://commons.apache.org/net/api/org/apache/commons/net/ftp/FTPClient.html#completePendingCommand ()

+4
source

All Articles