1

我使用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 上运行的机器有不同的“规则”?

4

1 回答 1

0

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

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

/** * 该类用于演示 Jakarta Commons Net 包的用法 */
public class 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);  
}      

}

于 2013-04-18T09:04:35.887 回答