Используйте FTP4J, чтобы возобновить процесс загрузки, а также узнать, сколько процентов загружено - PullRequest
1 голос
/ 12 апреля 2011

У кого-нибудь есть пример, как загрузить с ftp4j поддержку с резюме, а также как показать индикатор выполнения?

1 Ответ

0 голосов
/ 28 апреля 2014

Я только что реализовал своего рода следующий код.

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

Однако, даже если потоки являются простыми, в некоторых случаях потерянное соединение вы все равно не можете рассчитывать на общее количество переданных байтов, как сообщает слушатель. Итак, я наконец понял, что лучше всего спросить у сервера, сколько байтов он получил.

В моем шаблоне временная избыточность носит более общий характер и включает управляющее соединение с FTP-сервером. Вы можете ограничить цикл while соединением для передачи данных, т.е. загрузкой.

</p> <pre><code>FTPClient ftpClient = null; long writtenBytes; boolean isCompletedStartingDelete = false; // Our policy is overwrite at first for (int attempt = 0; attempt < MAX_ATTEMPTS; attempt++) { try { ftpClient = getFTPClient(); configureFtpClient(ftpClient); doLogin(ftpClient); ftpClient.changeDirectory(remoteDirectory); if (!isCompletedStartingDelete) { // Our policy is overwrite at first try { ftpClient.deleteFile(file); isCompletedStartingDelete = true; } catch (FTPException e) { // Maybe you should check if this exception is really thrown for file not existing. isCompletedStartingDelete = true; } } try { writtenBytes = ftpClient.fileSize(fileName); } catch (Exception e) { writtenBytes = 0; } if (ftpClient.isResumeSupported()) { // With this template you also could use APPEND ftpClient.upload(file, writtenBytes, listener); } else { ftpClient.upload(file, listener); } } catch (FTPAbortException e) { // User Aborted operation break; } catch (Exception e) { if (attempt == MAX_ATTEMPTS) { // Or in general lastLoop throw e; } else { // Mask failure // LOG } } finally { if (ftpClient != null && ftpClient.isConnected()) { try { ftpClient.disconnect(); } catch (Throwable t) { /* LOG */ } } }

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