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服务器的哪个设置导致的?我的代码应该做些什么修改?

java J2EE 程序开发

老娘才不是芫荽 9 years, 9 months ago

有人吗

木丁丁的凹凸曼 answered 9 years, 9 months ago

哦,那我就接分....

菲莉丝·艾利斯 answered 9 years, 9 months ago

遇到这类问题,最好的方式就是看 服务器端 和 客户端 的 日志文件,具体查看 error/warning 记录。

如果要推断原因,最容易考虑到的就是:

  1. 防火墙问题(本地的和服务器端的),首先检查本地防火墙,FTP用的端口是20/21,可以直接把防火墙关掉;
  2. 权限问题;
  3. 客户端没有使用PASV模式;
  4. 目标盘满了。

如果还是不行,尝试修改代码如下:

  1. 设置文件类型为BINARY

    objFtpClient.setFileType(FTP.BINARY_FILE_TYPE);
    
  2. 设置文件传输模式为BINARY

    objFtpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);
    
  3. 设置模式为Passive

    objFtpClient.enterLocalPassiveMode();
    

希望对你有帮助。

老湿大点力啊 answered 9 years, 9 months ago

Your Answer