【问题标题】:File not uploading successfully to FTP文件未成功上传到 FTP
【发布时间】:2012-04-23 11:43:55
【问题描述】:

我写了一个独立的程序来上传文件到 FTP 服务器。代码运行良好,但我在 FTP 上找不到文件。这是代码

import java.io.FileInputStream;
import java.io.IOException;
import java.net.SocketException;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;


public class FTPDemo {

    public static void main(String[] args) {

        FTPClient ftp = new FTPClient();
        int reply;

        try {

            ftp.connect("ip address");
            ftp.login("username","password");
            reply = ftp.getReplyCode();

            if(FTPReply.isPositiveCompletion(reply)){
                System.out.println("Connected Success");
            }else {
                System.out.println("Connection Failed");
                ftp.disconnect();
            }

            FileInputStream fis = null;
            String filename = "demo.txt";
            fis = new FileInputStream("C:\\demo.txt");
            System.out.println("Is file stored: "+ftp.storeFile(filename,fis));
            fis.close();
            ftp.disconnect();
        } catch (SocketException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }

    }
}

是否存储文件返回 false。可能是什么问题?

【问题讨论】:

  • 使用getReplyCode()方法获取ftp准确的ftp错误码。然后我们可以调查原因。

标签: java apache ftp apache-commons


【解决方案1】:

让我引用FTPClient documentation

FTPClient 中所有 FTP 命令方法的约定是,它们要么返回布尔值,要么返回一些其他值。布尔方法在 FTP 服务器成功完成回复时返回 true,在导致错误条件或失败的回复时返回 false。返回布尔值以外的值的方法返回包含由 FTP 命令生成的更高级别数据的值,如果回复导致错误条件或失败,则返回 null。如果要访问导致成功或失败的确切 FTP 回复代码,则必须在成功或失败后调用 getReplyCode。

换句话说,要了解失败的实际原因,您需要致电ftp.getReplyCode() 并从那里开始工作。

【讨论】:

  • 我相信回复代码是正确的,因为我可以在控制台“连接成功”上看到消息。
  • 是的,但请检查您的 storeFile() 调用后 getReplyCode() 返回的内容。
  • 调用storeFile()之前回复码是230,storeFile之后回复码是500。
  • 来自此页面 en.wikipedia.org/wiki/List_of_FTP_server_return_codes 500 Syntax error, command unrecognized. This may include errors such as command line too long. 在调用 storeFile 之前尝试这些:ftp.setFileType(FTP.BINARY_FILE_TYPE, FTP.BINARY_FILE_TYPE); ftp.setFileTransferMode(FTP.BINARY_FILE_TYPE);
  • 我使用了你指定的上述方法,它仍然没有在 FTP 上创建文件。回复代码在 storeFileCall() 调用之前是 230,之后是 500。
猜你喜欢
  • 1970-01-01
  • 2012-03-12
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 2018-04-02
  • 1970-01-01
  • 2020-12-21
相关资源
最近更新 更多