Android клиентское приложение FTP - как скачать файл с FTP сервера - PullRequest
1 голос
/ 28 января 2012

Я использую библиотеку org.apache.commons.net.ftp, я загрузил файл, но когда я пытаюсь загрузить файл с FTP-сервера на виртуальную SDCard моего эмулятора, он не работает.как указать путь назначения?это путь к SD-карте, куда мне нужно скачать, и как указать путь к исходному файлу (файл в пути к странице FTP-сервера)?

вот код, который я пытался выполнить,

try 
{
     FileOutputStream desFileStream1 = new FileOutputStream("/sdcard/Baby.jpg");
     Boolean status1 = con.retrieveFile("/Baby", desFileStream1);
     if(status1)
     {
        lblResult2.setText("File downloaded Successfully");
     }
     else
     {
        lblResult2.setText("File download failed");
     }
     DesFileStream1.close();
} catch (Exception e) 
  {
    Log.d(TAG, "download failed");
  }

любой из вас поможет мне.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2012
 File file = new File(Environment.getExternalStorageDirectory() + "/pdf");
        if(!file.exists())

           file.mkdir(); //directory is created;
            try {
                ftp = new FTPClient();
                ftp.connect("yours ftp URL",21);//don't write ftp://

                try {
                    int reply = ftp.getReplyCode();
                  if (!FTPReply.isPositiveCompletion(reply)) {
                    throw new Exception("Connect failed: " + ftp.getReplyString());
                    }
                    if (!ftp.login("username","password")) {
                      throw new Exception("Login failed: " + ftp.getReplyString());
                    }
                    try {
                        ftp.enterLocalPassiveMode();
                        if (!ftp.setFileType(FTP.BINARY_FILE_TYPE)) {
//                          Log.e(TAG, "Setting binary file type failed.");
                        }

                        transferFile(ftp);
                    } catch(Exception e) {
//                      handleThrowable(e);
                    } finally {
                        if (!ftp.logout()) {
//                          Log.e(TAG, "Logout failed.");
                        }
                    }
                } catch(Exception e) {
//                  handleThrowable(e);
                } finally {
                    ftp.disconnect();
                }
            } catch(Exception e) {
//              handleThrowable(e);
            }


    }

private void transferFile(FTPClient ftp) throws Exception {
        long fileSize=0;
        fileSize = getFileSize(ftp, "nag.pdf");
        Log.v("async","fileSize"+fileSize);
        if(!(fileSize==0)){
            InputStream is = retrieveFileStream(ftp,  "nag.pdf");
            downloadFile(is,  fileSize);
            is.close();
            }
            else


                 //nosuch files

        if (!ftp.completePendingCommand()) {
            throw new Exception("Pending command failed: " + ftp.getReplyString());
        }
    }

    private InputStream retrieveFileStream(FTPClient ftp, String filePath)
    throws Exception {
        InputStream is = ftp.retrieveFileStream(filePath);
        int reply = ftp.getReplyCode();
        if (is == null
                || (!FTPReply.isPositivePreliminary(reply)
                        && !FTPReply.isPositiveCompletion(reply))) {
            throw new Exception(ftp.getReplyString());
        }
        return is;
    }

    private byte[] downloadFile(InputStream is, long fileSize)
    throws Exception {
    outputStream os = newFileOutputStream(Environment.getExternalStorageDirectory()
                + "/pdf/nag.pdf");  
        byte[] buffer = new byte[(int) fileSize];
        int readCount;
        while( (readCount = is.read(buffer)) > 0) {
            os.write(buffer, 0, readCount);
        }
        Log.i("tag", "buffer = " + buffer);
        return buffer; // <-- Here is your file's contents !!!
    }

    private long getFileSize(FTPClient ftp, String filePath) throws Exception {
        long fileSize = 0;
        FTPFile[] files = ftp.listFiles(filePath);
        if (files.length == 1 && files[0].isFile()) {
            fileSize = files[0].getSize();
        }
        Log.i("tag", "File size = " + fileSize);
        return fileSize;
    }

}
0 голосов
/ 28 января 2012

Используйте getExternalStorageDirectory() или getExternalStoragePublicDirectory() на Environment, чтобы найти правильный корень внешнего хранилища, который на большинстве устройств Android не равен /sdcard.

...