Странная проблема при отправке файла с Android на сервер! - PullRequest
0 голосов
/ 24 марта 2011

Я столкнулся с очень странной проблемой при отправке файлов, таких как картинки, текстовые и zip-файлы, на сервер через ftp.В большинстве случаев все работает нормально.Но иногда сервер имеет только часть файла.На Android я использую com.enterprisedt.net.ftp.Вот фрагмент кода для отправки файла:

public void ftpUploadFiles(ArrayList<String> fileList, boolean bDeleteAfterUploaded)
{
    if(fileList.size() <= 0)
        return;

    // set up to transfer the files
    FileTransferClient ftp = null;
    try 
    {
        //Make sure there is only FTP in the whole system at any given time.
        synchronized(this)
        {
            // create client
            ftp = new FileTransferClient();
            // set remote host
            ftp.setRemoteHost("xxxxxxx");

            ftp.setUserName("xxxxxx");
            ftp.setPassword("xxxxx");

            // connect to the server
            ftp.connect();
            ftp.getAdvancedFTPSettings().setConnectMode(FTPConnectMode.PASV);
            //1. Upload each file
            for(int i = 0 ; i < fileList.size(); i++)
            {
                if(!FileKit.fileExist(fileList.get(i)))
                    continue;

                ftp.uploadFile(fileList.get(i), FileKit.getFileName(fileList.get(i)));

                if(bDeleteAfterUploaded)
                    FileKit.fileDelete(fileList.get(i));
            }

            ftp.disconnect();
        } //End of synchronized
    } catch (Exception e) 
    {
        FileKit.handleException(e);
    }
}

FileKit - это статический класс обертки для обычных файловых функций.ftpUploadFiles () вызывается Intent в отдельном потоке, поэтому он может работать в фоновом режиме.Кажется, что происходит то, что ftp останавливается до полной передачи файла, поэтому сервер получает только часть файла.Исходя из приведенного выше кода, что может вызвать проблемы?Или это возможно, что проблема с com.enterprisedt.net.ftp?

Спасибо.

1 Ответ

0 голосов
/ 11 февраля 2019

Ваш код, кажется, обрабатывает только полные файлы.Таким образом, он должен либо завершиться успешно, либо завершиться неудачей только для полных файлов.При этом остается только пакет com.enterprisedt.net.ftp, который может отправлять файлы по частям, например, при сбоях в сети.

Может возникнуть проблема, если передача прерывается из-за перегрузки сети и т. Д.«Если сетевое соединение прервано, сервер все еще может подумать, что вы подключены (так как quit () не был вызван). Следовательно, новое соединение и попытка возобновления могут потерпеть неудачу по причине, указанной ниже».(https://enterprisedt.com/forums/viewtopic.php?t=960)

Так что я думаю, что либо в программном обеспечении ftp есть ошибка при сбое сети, либо ваш код не обрабатывает программное обеспечение ftp при сбоях сети.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...