代码之家  ›  专栏  ›  技术社区  ›  Fabian

Android FTP上载-文件未上载

  •  1
  • Fabian  · 技术社区  · 9 年前

    我找到了一些关于它的信息,并像我在这里找到的那样构建了我的类: http://www.sebastianviereck.de/ftp-upload-mit-android/

    我还在清单中添加了互联网权限,并设置了strictmode,就像我在这里找到的那样: Error StrictMode$AndroidBlockGuardPolicy.onNetwork

    storeFile ist treu的结果和ftpClient的回复代码为226(“关闭数据连接。请求的文件操作成功(例如,文件传输或文件中止)”)。

    有人有主意吗?

    这是我的代码:

    主要:

    FtpDataHandler ftp = new FtpDataHandler("serverName", "userName", "password", "/folder");
                        ftp.uploadFile("/storage/emulated/0/pictures/test_sig.jpg", "test_sig.jpg");
    

    FTP处理程序:

    import java.io.BufferedInputStream;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    
    import org.apache.commons.net.ftp.FTPClient;
    
    import android.util.Log;
    
    public class FtpDataHandler {
        private static final String TAG = "FtpDataHandler";
    
        String serverAdress;
        String userName;
        String password;
        String serverDirectory; 
        FTPClient ftpClient;
    
        public FtpDataHandler(String serverAdress, String userName, String password, String serverDiretory) {
            this.serverAdress = serverAdress;
            this.userName = userName;
            this.password = password;
            //this was my problem. I set the serverAdress to the serverDirectory insted the serverDirectory
            //this.serverDirectory = serverAdress;
            this.serverDirectory = serverDirectory;
    
            connect();
        }  
    
        public String getServerAdress() {
            return serverAdress;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public String getServerDirectory() {
            return serverDirectory;
        }
    
        public boolean uploadFile(String localFilePath, String remoteFileName) {
            boolean result = false;
    
            BufferedInputStream buffIn = null;
            try {
                buffIn = new BufferedInputStream(new FileInputStream(localFilePath));
            } catch (FileNotFoundException e) {
                Log.d(TAG,
                        "FileNotFoundException: local File to be uploaded not Found: " + localFilePath);
            }
            ftpClient.enterLocalPassiveMode();
    
            try {
                result = ftpClient.storeFile(remoteFileName, buffIn);
                Log.d(TAG, "Reply code: " + ftpClient.getReplyCode());
            } catch (IOException e) {
                Log.d(TAG, "IOException: remote File could not be accessed");
            }
            try {
                buffIn.close();
            } catch (IOException e) {
                Log.d(TAG, "IOException: buffIn.close()");
            }
    
            return result;
        }
    
        public boolean connect(){
            boolean bool = false;
            ftpClient = new FTPClient();
    
            try {
    
                ftpClient.connect(this.serverAdress);
                bool = ftpClient.login(this.userName, this.password);
                if (!bool){
                    Log.d(TAG, "Login Reply Code" + ftpClient.getReplyCode());
                }
                ftpClient.changeWorkingDirectory(this.serverDirectory);
                ftpClient.setFileType(org.apache.commons.net.ftp.FTP.BINARY_FILE_TYPE);
            } catch (IOException e) {
                Log.d(TAG,
                        "IOException ftp Client could not be established.controll Login, Server, Pw.");
            }
            Log.d(TAG, "FTP Server Response: " + ftpClient.getReplyString());
    
            return bool;
        }
    
        public void unregisterConnection(){
            try {
                ftpClient.logout();
                ftpClient.disconnect();
            } catch (IOException e) {
                Log.d(TAG, "IOException: ftpClient close/logout");
            }
        }
    }
    

    FTP Server Response: 200 Type set to I
    

    以及之后的回复代码。FTP客户端。storeFile(remoteFileName,buffIn);

    Reply code: 226
    

    我可以通过Ftp客户端上传文件,如FileZilla或Turbo Ftp客户端。

    2017-10-05 19:02:28 8160 1 Status: Resolving address of server.com
    2017-10-05 19:02:28 8160 1 Status: Connecting to serverIp...
    2017-10-05 19:02:28 8160 1 Status: Connection established, waiting for welcome message...
    2017-10-05 19:02:28 8160 1 Response: 220 FTP on server.com ready
    2017-10-05 19:02:28 8160 1 Command: AUTH TLS
    2017-10-05 19:02:28 8160 1 Response: 234 AUTH TLS successful
    2017-10-05 19:02:28 8160 1 Status: Initializing TLS...
    2017-10-05 19:02:28 8160 1 Status: Verifying certificate...
    2017-10-05 19:02:28 8160 1 Status: TLS connection established.
    2017-10-05 19:02:28 8160 1 Command: USER user
    2017-10-05 19:02:28 8160 1 Response: 331 Password required for user
    2017-10-05 19:02:28 8160 1 Command: PASS ************
    2017-10-05 19:02:28 8160 1 Response: 230 User user logged in
    2017-10-05 19:02:28 8160 1 Command: OPTS UTF8 ON
    2017-10-05 19:02:28 8160 1 Response: 200 UTF8 set to on
    2017-10-05 19:02:28 8160 1 Command: PBSZ 0
    2017-10-05 19:02:28 8160 1 Response: 200 PBSZ 0 successful
    2017-10-05 19:02:28 8160 1 Command: PROT P
    2017-10-05 19:02:28 8160 1 Response: 200 Protection set to Private
    2017-10-05 19:02:28 8160 1 Status: Logged in
    2017-10-05 19:02:28 8160 1 Status: Retrieving directory listing...
    2017-10-05 19:02:28 8160 1 Command: PWD
    2017-10-05 19:02:28 8160 1 Response: 257 "/" is the current directory
    2017-10-05 19:02:28 8160 1 Command: TYPE I
    2017-10-05 19:02:28 8160 1 Response: 200 Type set to I
    2017-10-05 19:02:28 8160 1 Command: PASV
    2017-10-05 19:02:28 8160 1 Response: 227 Entering Passive Mode (xx,xx,xx,xx,xx,xx).
    2017-10-05 19:02:28 8160 1 Command: MLSD
    2017-10-05 19:02:28 8160 1 Response: 150 Opening BINARY mode data connection for MLSD
    2017-10-05 19:02:29 8160 1 Response: 226 Transfer complete
    2017-10-05 19:02:29 8160 1 Status: Directory listing of "/" successful
    2017-10-05 19:02:36 8160 3 Status: Resolving address of server.com
    2017-10-05 19:02:36 8160 3 Status: Connecting to serverIp...
    2017-10-05 19:02:36 8160 3 Status: Connection established, waiting for welcome message...
    2017-10-05 19:02:36 8160 3 Response: 220 FTP on server.com ready
    2017-10-05 19:02:36 8160 3 Command: AUTH TLS
    2017-10-05 19:02:36 8160 3 Response: 234 AUTH TLS successful
    2017-10-05 19:02:36 8160 3 Status: Initializing TLS...
    2017-10-05 19:02:36 8160 3 Status: Verifying certificate...
    2017-10-05 19:02:36 8160 3 Status: TLS connection established.
    2017-10-05 19:02:36 8160 3 Command: USER user
    2017-10-05 19:02:36 8160 3 Response: 331 Password required for user
    2017-10-05 19:02:36 8160 3 Command: PASS ************
    2017-10-05 19:02:36 8160 3 Response: 230 User user logged in
    2017-10-05 19:02:36 8160 3 Command: OPTS UTF8 ON
    2017-10-05 19:02:36 8160 3 Response: 200 UTF8 set to on
    2017-10-05 19:02:36 8160 3 Command: PBSZ 0
    2017-10-05 19:02:36 8160 3 Response: 200 PBSZ 0 successful
    2017-10-05 19:02:36 8160 3 Command: PROT P
    2017-10-05 19:02:36 8160 3 Response: 200 Protection set to Private
    2017-10-05 19:02:36 8160 3 Status: Logged in
    2017-10-05 19:02:36 8160 3 Status: Starting upload of C:\Users\User1\Pictures\test_sig.jpg
    2017-10-05 19:02:36 8160 3 Command: CWD /folder
    2017-10-05 19:02:36 8160 3 Response: 250 CWD command successful
    2017-10-05 19:02:36 8160 3 Command: PWD
    2017-10-05 19:02:36 8160 3 Response: 257 "/folder" is the current directory
    2017-10-05 19:02:36 8160 3 Command: TYPE I
    2017-10-05 19:02:36 8160 3 Response: 200 Type set to I
    2017-10-05 19:02:36 8160 3 Command: PASV
    2017-10-05 19:02:36 8160 3 Response: 227 Entering Passive Mode (xx,xx,xx,xx,xx,xx).
    2017-10-05 19:02:36 8160 3 Command: STOR test_sig.jpg
    2017-10-05 19:02:37 8160 3 Response: 150 Opening BINARY mode data connection for test_sig.jpg
    2017-10-05 19:02:38 8160 3 Response: 226 Transfer complete
    2017-10-05 19:02:38 8160 3 Status: File transfer successful, transferred 1.728.438 bytes in 1 second
    2017-10-05 19:02:38 8160 3 Status: Retrieving directory listing of "/folder"...
    2017-10-05 19:02:38 8160 3 Command: PASV
    2017-10-05 19:02:38 8160 3 Response: 227 Entering Passive Mode (xx,xx,xx,xx,xx,xx).
    2017-10-05 19:02:38 8160 3 Command: MLSD
    2017-10-05 19:02:38 8160 3 Response: 150 Opening BINARY mode data connection for MLSD
    2017-10-05 19:02:38 8160 3 Response: 226 Transfer complete
    2017-10-05 19:02:38 8160 3 Status: Directory listing of "/folder" successful
    
    1 回复  |  直到 9 年前
        1
  •  0
  •   Fabian    9 年前

    我解决了这个问题。它是FtpDataHandler中的一个副本和过去的失败。 我设置了这个。serverDirectory等于ServerAddress。因此Ftp客户端无法在服务器上找到目录。

    以下是代码snippit:

    public FtpDataHandler(String serverAdress, String userName, String password, String serverDiretory) {
        this.serverAdress = serverAdress;
        this.userName = userName;
        this.password = password;
        //this was my problem. I set the serverAdress to the serverDirectory insted the serverDirectory
        //this.serverDirectory = serverAdress;
        this.serverDirectory = serverDirectory;
    
        connect();
    }  
    

    我还在问题中修复了它,这样更容易找到完整的解决方案。

    推荐文章