我正在使用ftp4j作为ftp客户端。

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

它在本地主机上工作得很好,但是当它包含在部署在web服务器上的jsfweb应用程序中时就不工作了。我成功地完成了连接和登录,当代码到达upload命令时,它就跳过了这个命令,什么也不做。没有引发异常。
ftp服务器是完全兼容的,这不成问题。我也对这些文件设置了chmod 777权限,它们属于同一所有者。
这段代码在windows机器上运行,是不是在linux上运行的机器有不同的“规则”?

最佳答案

你的代码似乎是正确的。尝试找出它抛出的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);
}

}

10-07 22:51