解决FTP上传图片文件,只上传文件名,大小为0的问题

用的是以下依赖包

    implementation 'commons-net:commons-net:3.5'

每次上传都是0B,问题出现在没有调用FTPClient.enterLocalPassiveMode();
这个方法的意思就是每次数据连接之前,ftp client告诉ftp server开通一个端口来传输数据。
为什么要这样做呢,因为ftp server可能每次开启不同的端口来传输数据,但是在linux上,由于安全限制,可能某些端口没有开启,所以就出现阻塞。
借鉴于这位老哥杨航JAVA

所以代码加上就可以了

 public static boolean uploadFile(String url, int port, String username,
                                     String password, String path, String filename, InputStream input) {
        boolean success = false;

        FTPClient ftp = new FTPClient();
       // LogUitl.Infor(url+port+username+password+path);


        try {
            int reply;
            ftp.connect(url, port);// 连接FTP服务器
            // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
            ftp.login(username, password);//登录
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return success;
            }
            
            ftp.enterLocalPassiveMode();//被动模式  
            
            ftp.setFileType(FTP.BINARY_FILE_TYPE);//上传上去的图片数据格式()一定要写这玩意,不然在服务器就打不开了
            if (!ftp.changeWorkingDirectory(path)) {
                if (ftp.makeDirectory(path)) {
                    ftp.changeWorkingDirectory(path);
                }
            }
           //  ftp.changeWorkingDirectory(path);
            //设置成其他端口的时候要添加这句话
          //  ftp.enterLocalPassiveMode();
            ftp.storeFile(filename, input);
            input.close();
            ftp.logout();
            success = true;
        } catch (IOException e) {
            Log.e("NWJ", "uploadFile: "+e.getMessage() );
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                    Log.e("NWJ", "uploadFile: "+ioe.getMessage() );
                }
            }
        }
        return success;
    }

猜你喜欢

转载自blog.csdn.net/prince70/article/details/109596105