【问题标题】:Fail to upload file using ftp4j使用 ftp4j 上传文件失败
【发布时间】:2013-04-18 08:29:53
【问题描述】:

我使用ftp4j 作为 FTP 客户端。

FTPClient client = new FTPClient();
client.connect("86.22.11.178");
client.login("usr", "pwd");
client.changeDirectory("/dir");
client.upload(file);

它在 localhost 上可以正常工作,但是当包含在部署在 Web 服务器上的 JSF Web 应用程序中时它就不能工作了。我成功地连接和登录,当代码到达上传命令时,它只是跳过那个并且什么都不做。没有抛出异常。

与 FTP 服务器已完全连接,这不是问题。我还对文件设置了 chmod 777 权限,它们属于同一所有者。

这段代码在 Windows 机器上运行,会不会是在 Linux 上运行的机器有不同的“规则”?

【问题讨论】:

    标签: java linux ftp ftp4j


    【解决方案1】:

    您的代码似乎是正确的。尝试找出它抛出的 FTP 错误。有时可能会发生超时,这是我面临的!!!

    导入 org.apache.commons.net.ftp.;
    导入 java.io.
    ;

    /** * 该类用于演示 Jakarta Commons Net 包的使用 */
    公共类 TestFTP {

    /** Creates a new instance of TestFTP */  
    public TestFTP() {  
    }  
    
    /** 
     * main - Unit test program 
     * @param args Command line arguments 
     * 
     */  
    public static void main(String args[]) {  
        try {  
            String ftpHost = "157.227.38.131";  
            String ftpUserName = "firebird";  
            String ftpPassword = "tcs@12345";  
            String ftpRemoteDirectory = "/etc/vlp/uploaded_files";  
            String fileToTransmit = "c:\\temp\\VLPDYN18022010174439.an";  
    
            //Create a Jakarta Commons Net FTP Client object  
            FTPClient ftp = new FTPClient();  
    
            //A datatype to store responses from the FTP server  
            int reply;  
    
            //  
            //Connect to the server  
            //  
            ftp.connect(ftpHost);  
    
            //  
            // After connection attempt, you should check the reply code to verify success.  
            //  
            reply = ftp.getReplyCode();      
            if(!FTPReply.isPositiveCompletion(reply)) {  
                try {  
                    ftp.disconnect();  
                } catch (Exception e) {  
                    System.err.println("Unable to disconnect from FTP server " +  
                                       "after server refused connection. "+e.toString());  
                }  
                throw new Exception ("FTP server refused connection.");  
            }                
            System.out.println("Connected to " + ftpHost + ". "+ftp.getReplyString());  
    
            //  
            //Try to login  
            //  
            if (!ftp.login(ftpUserName, ftpPassword)) {  
                throw new Exception ("Unable to login to FTP server " +  
                                     "using username "+ftpUserName+" " +  
                                     "and password "+ftpPassword);  
            }  
    
            System.out.println(ftp.getReplyString());  
            System.out.println("Remote system is " + ftp.getSystemName());  
    
            //  
            //Set our file transfer mode to either ASCII or Binary  
            //  
            //ftp.setFileType(FTP.ASCII_FILE_TYPE);  
            ftp.setFileType(FTP.BINARY_FILE_TYPE);  
    
            //  
            //Change the remote directory  
            //  
            if (ftpRemoteDirectory != null && ftpRemoteDirectory.trim().length() > 0) {  
                System.out.println("Changing to FTP remote dir: " + ftpRemoteDirectory);  
                ftp.changeWorkingDirectory(ftpRemoteDirectory);  
                reply = ftp.getReplyCode();  
    
                if(!FTPReply.isPositiveCompletion(reply)) {  
                    throw new Exception ("Unable to change working directory " +  
                                         "to:"+ftpRemoteDirectory);  
                }  
            }  
    
            //  
            //Get the file that we will transfer and send it.  
            //  
            File f = new File(fileToTransmit);  
            System.out.println("Storing file as remote filename: " + f.getName());  
            boolean retValue=true;  
           try{   
            retValue = ftp.storeFile(f.getName(), new FileInputStream(f));  
           }catch(Exception e){e.printStackTrace();}  
            if (!retValue) {  
              throw new Exception ("Storing of remote file failed. ftp.storeFile() returned false.");  
            }  
    
            //Disconnect from the FTP server  
            //  
            try {  
                //ftp.logout();  
                ftp.disconnect();  
            } catch (Exception exc) {  
                System.err.println("Unable to disconnect from FTP server. " + exc.toString());  
            }  
    
        } catch (Exception e) {  
            System.err.println("Error: "+e.toString());  
        }  
    
        System.out.println("Process Complete.");  
        System.exit(0);  
    }      
    

    }

    【讨论】:

    • 我怎样才能找到 FTP 错误?我找不到它,这就是问题!