【问题标题】:Android FTP upload - Files are not uploadedAndroid FTP 上传 - 文件未上传
【发布时间】:2017-09-28 16:57:37
【问题描述】:

我想通过 ftp 上传文件。 我找到了一些关于它的信息并建立了我的课程,就像我在这里找到的一样:http://www.sebastianviereck.de/ftp-upload-mit-android/

我还在清单中添加了互联网权限并设置了严格模式,就像我在这里找到的那​​样: 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");
        }
    }
}

这里也是ftpClient.login之后的ftpClient.getReplyString(),this.ftpClient.changeWorkingDirectory(this.serverDirectory),this.ftpClient.setFileType(2);

FTP Server Response: 200 Type set to I

以及this.ftpClient.storeFile(remoteFileName, buffIn);之后的回复代码

Reply code: 226

我可以通过 FileZilla 或 Turbo FTP 客户端等 Ftp 客户端上传文件。 在这里您可以看到我笔记本电脑上使用的 FileZilla 的日志。

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

【问题讨论】:

  • @DimaKozhevin 这不是这个问题的重复。我从 storeFile 函数得到了真正的回报
  • 告诉我们minimal reproducible example。告诉我们remoteFileName 的实际值是多少。告诉我们您如何检查“文件未上传”。向我们展示一个日志文件。
  • @MartinPrikryl 我从 Main 中删除了不必要的代码并添加了文件名和路径。所以 RemoteFileName 和 localFilePath 是 remoteFileName = "com_777777_sig.jpg" localFilePath = "/storage/emulated/0/comuniverseAppData/pictures/com_777777_sig.jpg"
  • @MartinPrikryl 要检查文件没有上传,请查看我的 ftp 服务器的文件夹。

标签: android ftp apache-commons-net


【解决方案1】:

我解决了这个问题。这是 FtpDataHandler 中的副本和过去的失败。 我设置 this.serverDirectory 等于 serverAdress。所以Ftp Client在服务器上找不到目录。

这里是代码片段:

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();
}  

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

感谢@Martin Prikryl 的支持。

【讨论】:

    猜你喜欢
    • 2013-08-25
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 2012-03-12
    • 2013-06-30
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多