从 Filezilla 连接到 FTP 服务器,但从 Android 中的 ftpClient Apache Commons 返回 530

问题描述

我想从 Android 向 FTP 服务器发送一些文件我有服务器 IP 地址、用户名和密码。我尝试从 Filezilla 连接到它并且它可以工作,但是,如果我尝试从 Android 连接它会失败。我从 ftpClient.getReplyCode() 获得状态代码 530。

根据https://en.wikipedia.org/wiki/List_of_FTP_server_return_codes,状态码表示登录无效。 ftpClient.login 返回 false。 所以我尝试用 node.js 挂载一个 FTP 服务器,并且可以完美地连接和上传文件。然后我尝试使用 username: demo 和 password: password 连接到另一个测试服务器 ftp://test.rebex.net/ 并且登录也有效(上传文件失败,因为它是一个测试帐户)。

但是为什么我无法从 Android 而不是从 Filezilla 登录到该特定服务器?

我的代码

    uploading_to_local_server = true;
    FTPClient ftpClient = new FTPClient();
    try {
        if(port == 0){
            ftpClient.connect(ftpserver);
        }else {
            ftpClient.connect(ftpserver,port);
        }

        ftpClient.setSoTimeout(10000);
        ftpClient.enterLocalPassiveMode();
        Log.d(TAG,"FTP. TRYING TO LOGIN ");
        Boolean login_response = ftpClient.login(ftp_usr,ftp_psw);
        mreplyCode = ftpClient.getReplyCode();
        Log.d(TAG,"FTP. RESPONSE " + mreplyCode);
        if (login_response) {
            Log.d(TAG,"FTP. VIDEOS TO UPLOAD: LOGGED SUCCESFULLY");
            //Logged.

            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
            ftpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);

            //iterating through the videos
            String video_upload_result = "UkNown Error";
            ArrayList<HashMap<String,String>> list_videos_to_upload = dataBaseHelper.getVideoslocalserverH();
            for (int counter = 0; counter < list_videos_to_upload.size(); counter++) {
                video_upload_result = "UkNown Error";
                //list_videos_to_upload.get(counter).put("imei",IMEI);
                String video_path = list_videos_to_upload.get(counter).get("dir_route");
                String video_name = list_videos_to_upload.get(counter).get("video_name");
                String vid_id = list_videos_to_upload.get(counter).get("id");
                String sync_status = list_videos_to_upload.get(counter).get("sync");

                Log.d(TAG,"VIDEOS TO UPLOAD: " + video_path + " ID: " + vid_id);
                //Log.d(TAG,"WIFI STATUS: " + mWifi.isConnected() + " DATA STATUS: " + wData.isConnected());

                video_upload_result = try_upload_video_to_ftpserver(ftpClient,video_name,remote_path,video_path);

                Log.d(TAG,"VIDEOS TO UPLOAD: " + video_path + " RESULT: " + video_upload_result);


                if(video_upload_result.equals("Succes")) {
                    Log.d(TAG,"TESTING UPLOAD: VIDEO ID: "+ vid_id);
                    dataBaseHelper.modVideos_Localserver(Collections.singletonList(vid_id));
                }else if(video_upload_result.equals(video_path + ": open Failed: ENOENT (No such file or directory)")){
                    Log.d(TAG,"TESTING UPLOAD: ERROR CATCHED. FILE NOT FOUND: "+ vid_id);
                    dataBaseHelper.modVideos_Localserver(Collections.singletonList(vid_id));
                }
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    Log.d(TAG,"Error Sleeping thread");
                    e.printstacktrace();
                }



            }

        }

        ftpClient.logout();
        ftpClient.disconnect();
    }catch (IOException e) {
        e.printstacktrace();
    }
    Log.d(TAG,"UPLOADING LOOP ENDED: ");
    uploading_to_local_server = false;

编辑:

终于成功了。

原来服务器只接受通过 ftps 的连接。 所以我改变了: FTPClient ftpClient = new FTPClient(); 为了 FTPSClient ftpClient = new FTPSClient("TLS",false);

我设法连接到服务器但仍然无法上传视频,因为服务器也只接受加密数据,所以我补充道: ftpClient.execPROT("P"); // 加密数据通道

现在我终于可以将视频上传到该服务器了。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...