3

当我尝试使用 Apache CommonsFTPClient和此代码上传一个简单的文本文件时:

FTPClient ftp = new FTPClient();
int reply;

// connect
try {

    ftp.connect(serverAdd);
    ftp.login(username,password);
    reply = ftp.getReplyCode();

    if(FTPReply.isPositiveCompletion(reply)){
        System.out.println("Connected Success..");

        // upload file
        try {
            String fileDir = "testfile.txt";
            FileInputStream in = null;         
            in = new FileInputStream(fileDir);       
            ftp.storeFile(fileDir,in);
            System.out.println("File upload complete..");
        }catch(IOException e){
            System.out.println(e);
        }

        ftp.disconnect();
        System.out.println("Disconnected..");

    }else {
        System.out.println("Connection Failed..");
        ftp.disconnect();
    }    

} catch (SocketException ex) {
    ex.printStackTrace();
} catch (IOException ex) {
    ex.printStackTrace();
}

在 FTP 服务器的根目录中创建了一个文件,但它是空的。怎么了?上传 PDF 文件时,我已经尝试将 ftp 模式更改为 BINARY。但该文件的大小也是 0。

ftp.setFileType(FTP.BINARY_FILE_TYPE);

我也只想上传一堆txt文件,所以默认ascii模式应该没问题吧?

4

3 回答 3

2

好的,看来这是我的防火墙的问题。当我停用防火墙时,文件会毫无问题地写入 ftp。

于 2012-08-20T16:25:03.067 回答
2

我遇到了同样的问题。创建的文件但大小为 0 KB。将模式设置为被动后,我的文件成功传输到 FTP 服务器。事实上,在 FTP 服务器上上传文件时,我们必须注意两件事。

  1. 将文件类型设置为二进制

    objFtpClient.setFileType(FTP.BINARY_FILE_TYPE);
    
  2. 将模式设置为被动

    objFtpClient.enterLocalPassiveMode();
    
于 2013-10-14T13:25:13.103 回答
0

您可能还必须将 FileTranserMode 设置为二进制:

ftp.setFileType(FTP.BINARY_FILE_TYPE);
ftp.setFileTransferMode(FTP.BINARY_FILE_TYPE);
于 2012-08-19T16:55:16.247 回答