我很难弄清楚一些事情。 (我对这一切都很陌生。) 我写了这个 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_TYPE与 setFileType :
client.setFileType(FTPClient.BINARY_FILE_TYPE);
关于java - FTP客户端问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7356233/