java - FTP客户端问题

标签 java ftp file-transfer data-transfer

我很难弄清楚一些事情。 (我对这一切都很陌生。) 我写了这个 java pgm 来将一个大文件 ftp 到目标服务器。 这是代码(为了显示而对代码进行了一些修改):

public static void ftpUpload(String path, String upfileName, String dirName) throws Exception
{
    FTPClient client = new FTPClient();
    client.addProtocolCommandListener((ProtocolCommandListener) new PrintCommandListener(new PrintWriter(System.out)));
    client.enterLocalPassiveMode();

    FileInputStream fis = null;

    int reply;

    try {
        client.connect(ftpserver);
        client.login(ftpuserid, ftppasswd);
        reply = client.getReplyCode();

        if(FTPReply.isPositiveCompletion(reply)){
            client.changeWorkingDirectory(ftpdirectoryName + "/" + dirName);

            boolean mkDir = client.makeDirectory(getCurrentMMMYY().toLowerCase());

            client.changeWorkingDirectory(getCurrentMMMYY().toLowerCase());

              //Create an InputStream of the file to be uploaded
            fis = new FileInputStream(path + upfileName);

            //Store file to server
            client.storeFile(upfileName, fis);

        }    
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (fis != null) {
                fis.close();
            }
            client.logout();
            //client.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

我正在发送的文件发生了一些奇怪的事情... 我在原始服务器上的一个文件大小为 82575786,当我 ftp 这个文件时,它几乎发送了整个文件。它实际上发送了 82574867。(缺少 919) 原始服务器上的另一个文件是 717885,当我 ftp 这个文件时,它几乎发送了整个文件。它实际上发送了717522。(缺少363)

我提取了日志以查看是否出现崩溃,但没有显示传输有任何问题。这是显示传输的 2 个日志条目。

[08/09/11 20:21:13:618 EDT] 00000043 SystemOut O 221 - 您已经在 1 个文件中传输了 717522 个字节。 221-您已经在 1 个文件中传输了 82574867 字节。

任何人的帮助将不胜感激。 谢谢 丹.

最佳答案

您是否以 ASCII 模式而不是二进制模式传输? ASCII 模式根据服务器和客户端设置将 CR/LF 转换为 LF,反之亦然。

你在使用 Apache's FTP客户端?它说默认是 ASCII,你可以尝试设置 BINARY_FILE_TYPEsetFileType :

client.setFileType(FTPClient.BINARY_FILE_TYPE);

关于java - FTP客户端问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7356233/

相关文章:

java - 如何将 Java 字符串拆分为数组并打印结果数组内容(不带分隔符)

php - 将新的 Laravel 项目部署到实时服务器 - 内部页面链接不起作用

c# - 使用套接字传输文件

algorithm - 用有限的信息计算总的批量上传传输百分比

android - 通过蓝牙从android浏览Raspberry Pi的文件系统

java - 如何更改 JavaFX 中禁用的 ListView 的样式?

java - hibernate 搜索: Cannot do a wild card search on a dynamically mapped field text fields

OSX 10.6.4 中的 JAVA 1.5

networking - 如果数据使用校验和的 TCP,ftp 协议(protocol)为什么有时会产生传输错误?

java - 如何通过 FTP 下载文本文件并将内容读取为字符串