奇怪的FTPClient.storeFile行为

时间:2013-05-04 17:18:22

标签: java ftp apache-commons-net

我在将文件上传到FTP服务器时遇到了一些问题。

我写了这段代码,应该连接到FTP服务器,登录,并使用Apache Commons Net FTPClient上传文件:

FTPClient client = new FTPClient();
client.connect("somesite.com");
client.login("user", "password");
System.out.println("connected");

client.cwd("images/bar");
System.out.println("cwd succesful. Full reply: "+client.getReplyString());

FileInputStream fis = new FileInputStream(new File(System.getProperty("user.dir")+File.separator+"current_690.jpg"));
client.storeFile(image_name, fis);
System.out.println("Succesful store. Full reply: "+client.getReplyString());

终端的输出是:

connected
cwd succesful. Full reply: 250 OK. Current directory is /images/bar

Succesful store. Full reply: 226-File successfully transferred
226 3.190 seconds (measured here), 9.99 Kbytes per second

问题在于,如果我转到我的user.dir并打开current_690.jpg,它会正确显示我的图像,但是如果我下载刚刚使用我的FTPClient上传的图像,当我打开它时, os说Unable to preview the image, probabily it's corrupted or it's too big.

事实上我注意到在我的电脑上我的图像大小是32708个字节,但是在服务器上它显示我32615个字节,所以我认为图像的最后一部分没有被上传

为什么呢?我错过了什么吗?

1 个答案:

答案 0 :(得分:6)

默认文件类型是ASCII,因此您需要通过设置client.setFileType(FTPClient.BINARY_FILE_TYPE);告诉它将其转换为二进制文件 在你调用storefile之前。