我使用以下代码将照片上传到 ftp 主机。但照片上传后似乎被破坏了: 照片底部有灰色的细线。
可以通过减小FTPClient对象的缓冲区大小来减小灰线的大小。
import java.io.File;
import java.io.FileInputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.net.ftp.FTPClient;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPReply;
import sun.misc.Cleaner;
public class FtpConnectDemo1 {
public static void main(String[] args) {
FTPClient client = new FTPClient();
try {
client.connect("ftp.ftpsite.com");
//
// When login success the login method returns true.
//
boolean login = client.login("user@ftpsite.com", "pass");
if (login) {
System.out.println("Login success...");
int replay = client.getReplyCode();
if (FTPReply.isPositiveCompletion(replay)) {
File file = new File("C:\\Users\\e.behravesh\\Pictures\\me2_rect.jpg");
FileInputStream input = new FileInputStream(file);
client.setFileType(FTP.BINARY_FILE_TYPE);
if (!client.storeFile(file.getName(), input)) {
System.out.println("upload failed!");
}
input.close();
}
//
// When logout success the logout method returns true.
//
boolean logout = client.logout();
if (logout) {
System.out.println("Logout from FTP server...");
}
} else {
System.out.println("Login fail...");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
//
// Closes the connection to the FTP server
//
client.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
答案 0 :(得分:2)
从未听说过这种类型的腐败,但是:你是从防火墙后面上传的吗?在致电client.enterLocalPassiveMode();
之前尝试storeFile
。
答案 1 :(得分:2)
这是在最新版本的库中解决的已知错误:
http://commons.apache.org/net/changes-report.html#a3.0.1
答案 2 :(得分:0)
我刚刚在我的本地计算机上尝试过您的代码,但它确实有效。我没有看到任何灰线。
所以我猜这可能是Femi建议的被动模式,也可能是某些网络/防火墙/低级问题。
答案 3 :(得分:0)
检查conf文件和permitions !!在Unix中使用vsftp检查
WRITE_ENABLE = YES
保持原状。
检查另一个FTP客户端是否可以上传文件。
答案 4 :(得分:0)
FTP文件发送不是原子的,这意味着如果连接中发生崩溃,则只发送部分文件。我会提供添加更改名称,以便在文件发送结束时知道何时完成转移。