我很难搞清楚事情。 (我对这一切都很陌生。) 我把这个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个字节。
非常感谢任何人的帮助。 谢谢 丹。
答案 0 :(得分:3)
您是以ASCII模式而不是二进制模式进行传输? ASCII模式将CR / LF转换为LF,反之亦然,具体取决于服务器和客户端设置。
您使用的是Apache's FTP客户端吗?它表示默认为ASCII,您可以尝试使用BINARY_FILE_TYPE设置setFileType:
client.setFileType(FTPClient.BINARY_FILE_TYPE);
答案 1 :(得分:1)
要上传二进制文件,您必须使用FTP.BINARY_FILE_TYPE,但这还不够。
您只使用INPUT流,并且您还需要使用输出流
我希望这个例子可以帮到你:
FTPClient client = new FTPClient();
client.connect("192.168.30.20");
client.login("pwd", "pwd");
client.setFileType(FTP.BINARY_FILE_TYPE);
String path_base = "/myPath/";
InputStream fis = new FileInputStream("A.pdf");
OutputStream os = client.storeFileStream(path_base+ "B.pdf");
byte buf[] = new byte[8192];
int bytesRead = fis.read(buf);
while (bytesRead != -1) {
os.write(buf, 0, bytesRead);
bytesRead = fis.read(buf);}
fis.close();
os.close();
client.completePendingCommand();
client.logout();
client.disconnect();