FTPClient上传后,文件内容为空的有关问题
FTPClient上传后,文件内容为空的问题
程序在本机或者很多客户没有问题,但是在其中一个客户那里,FTP上传以后,只有文件名,但是文件内容为空。我看了操作权限,对于服务器上确实有上传和修改的权限,并且在IE里面打开FTP服务器,上传什么的都没有问题。
用的是apache的FTPclient。。。。or.ftp.FTPClient
FTP上传代码如下:
public static boolean uploadFile(String url,int port,String username, String password, String path, String filename, InputStream input,int id) {
boolean success = false;
FTPClient ftp = new FTPClient();
SystemStaticValue.xtzt.setZ_zs(SystemStaticValue.xtzt.getZ_zs()+1);
try {
int reply;
ftp.setConnectTimeout(1000);
ftp.connect(url, port);
success = ftp.login(username, password);
if(!success){
SystemStaticValue.FTP_boolean.put(id, false);
return success;
}
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
SystemStaticValue.FTP_boolean.put(id, false);
ftp.disconnect();
return success;
}
ftp.changeWorkingDirectory(path);
ftp.storeFile(filename, input);
input.close();
ftp.logout();
SystemStaticValue.xtzt.setZ_zc(SystemStaticValue.xtzt.getZ_zc()+1);
success = true;
SystemStaticValue.FTP_boolean.put(id, true);
} catch (IOException e) {
e.printStackTrace();
Lo(e.getMessage());
SystemStaticValue.FTP_boolean.put(id, false);
return false;
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return success;
}
后来有想过可能是FTP的主动被动模式导致,但是我用server-u自己挂了个FTP服务器,设置了它的主被动,结果是如果模式不对,那么文件是彻底上传不上去,不存在只上传了文件名,不上传文件内容的情况。。。
求教各位大神,这种情况,可能是FTP服务器的哪个设置导致的?我的代码应该做些什么修改?
老娘才不是芫荽
10 years, 4 months ago
Answers
遇到这类问题,最好的方式就是看 服务器端 和 客户端 的 日志文件,具体查看 error/warning 记录。
如果要推断原因,最容易考虑到的就是:
- 防火墙问题(本地的和服务器端的),首先检查本地防火墙,FTP用的端口是20/21,可以直接把防火墙关掉;
- 权限问题;
- 客户端没有使用PASV模式;
- 目标盘满了。
如果还是不行,尝试修改代码如下:
设置文件类型为BINARY
objFtpClient.setFileType(FTP.BINARY_FILE_TYPE);
设置文件传输模式为BINARY
objFtpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);
设置模式为Passive
objFtpClient.enterLocalPassiveMode();
希望对你有帮助。
老湿大点力啊
answered 10 years, 4 months ago