我很难搞清楚一些事情。(我对这一切都是新手。)我写这个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。源服务器上的另一个文件是717885,当我通过ftp传输此文件时,它几乎会发送整个文件。它实际上发送了717522。(缺少363)
我查看了日志,看是否有什么东西崩溃了,但它没有显示传输有任何问题。以下是显示传输的2个日志条目。
08/09/11 20:21:13:618EDT 00000043 SystemOut O 221-您已在1个文件中传输了717522字节。221-您已在%1个文件中传输了82574867字节。
任何人的帮助都将不胜感激。谢谢,丹。
发布于 2011-09-09 09:32:21
您是否以ASCII模式而不是二进制模式进行传输?ASCII模式根据服务器和客户端设置将CR/LF转换为LF,反之亦然。
您是否在使用Apache's FTP客户端?它说默认值是ASCII码,你可以尝试用setFileType设置BINARY_FILE_TYPE
client.setFileType(FTPClient.BINARY_FILE_TYPE);发布于 2011-10-19 23:05:20
要上传二进制文件,您必须使用FTP.BINARY_FILE_TYPE,但这还不够。
您只使用了一个输入流,并且还需要使用一个输出流
我希望这个例子能帮助你:
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();https://stackoverflow.com/questions/7356233
复制相似问题