0

私はアンドロイドプログラミングが初めてです。また、ビデオ、jpg、および pdf を ftp サーバーから Android デバイスにダウンロードする必要があります。

これがスレッド内の私のダウンロードコードです

      MyFTPClient ftpclient=null;
      ftpclient = new MyFTPClient();
      status = ftpclient.ftpConnect("xxx.xxx.xxx.xxx", "username", "password", 21);
      if (status == true) {
      Log.d(TAG, "Connection Success");
          FTPFile[] filelist= ftpclient.ftpPrintFilesList("/httpdocs/");
          for(int i=0;i<filelist.length;i++){
              if(filelist[i].getType()==1)
              {
                   File myFile = new File("/storage/sdcard0/App/"+filelist[i].getName());
                   if(!myFile.exists()){
                      File folder=new File("/storage/sdcard0/App/"+filelist[i].getName());
                      folder.mkdir();
                   }
               }
               else if(filelist[i].getType()==0)
               {
                    ftpclient.ftpDownload("/httpdocs/"+filelist[i].getName(), "/storage/sdcard0/App/"+filelist[i].getName());
               }
          }
          else {
                Log.d(TAG, "Connection failed");
          }

これは私のFTPクライアントクラスです

public boolean ftpConnect(String host, String username,
                          String password, int port)
{
    try {
        mFTPClient = new FTPClient();
        mFTPClient.connect(host, port);
        mFTPClient.setFileType(FTP.BINARY_FILE_TYPE);
        if (FTPReply.isPositiveCompletion(mFTPClient.getReplyCode())) {
            boolean status = mFTPClient.login(username, password);

            mFTPClient.setFileType(FTP.ASCII_FILE_TYPE);
            mFTPClient.enterLocalPassiveMode();

            return status;
        }
    } catch(Exception e) {
        Log.d(TAG, "Error: could not connect to host " + host+"Cause: "+e.getCause() );
    }
    return false;
} 


public FTPFile[] ftpPrintFilesList(String dir_path)
{
    try {
        FTPFile[] ftpFiles = mFTPClient.listFiles(dir_path);
        int length = ftpFiles.length;

        for (int i = 0; i < length; i++) {
            String name = ftpFiles[i].getName();
            boolean isFile = ftpFiles[i].isFile();

            if (isFile) {
                Log.i(TAG, "File : " + name);
            }
            else {
                Log.i(TAG, "Directory : " + name);
            }
        }

        return ftpFiles;
    } catch(Exception e) {
        e.printStackTrace();

        return null;
    }
} 

public boolean ftpDownload(String srcFilePath, String desFilePath)
{
    boolean status = false;
    try {
        FileOutputStream desFileStream = new FileOutputStream(desFilePath);;
        status = mFTPClient.retrieveFile(srcFilePath, desFileStream);
        desFileStream.flush();
        desFileStream.close();

        return status;
    } catch (Exception e) {
        Log.d(TAG, "download failed");
    }

    return status;
} 

これらのコードはファイルをダウンロードしますが、一部の PDF またはビデオを開こうとすると、「ドキュメントを開くときにエラーが発生しました」というエラーが表示されます。

ダウンロード コードが正しく動作するようにするにはどうすればよいですか? エラーの原因は何ですか?

PS: ビデオ ファイルは 100 ~ 200 MB、pdf ファイルは 1 ~ 5 MB です。

4

1 に答える 1

1

ログイン方法内でこれを設定するのはなぜですか? mFTPClient.setFileType(FTP.ASCII_FILE_TYPE); 最後にバイナリのままにする必要があります...

于 2013-05-29T10:45:37.367 に答える