FTPClient возвращается: не удается разобрать код ответа - PullRequest
0 голосов
/ 27 апреля 2020

Я получаю это, когда пытаюсь получить файл с помощью FTPClient:

Could not parse response code.
Server Reply:
150 Opening data channel for file download from server

Как я подключился:

    FTPClient ftpClient = new FTPClient();
    ftpClient.setDefaultTimeout(this.timeout);

    try {
        ftpClient.connect(this.host, this.port);
        ftpClient.setSoTimeout(this.timeout);
        if (!ftpClient.login(username, password)) {
            return null;
        }
    } catch (IOException e) {
        return null;
    }

Код, вызывающий проблему:

    File downloadedFile = new File(localFile);

    try (OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(downloadedFile))) {

        ftpClient.retrieveFile(remoteFilePath, outputStream);
    }

Когда я вручную загружаю файл с помощью команд FTP, я получаю многострочный ответ:

ftp> get file
local: file remote: file
200 Port command successful
150 Opening data channel for file download from server of "/file"
226 Successfully transferred "/file"
202 bytes received in 0.00 secs (1777.2 kB/s)

1 Ответ

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

Возможно, соединение закрыто до завершения передачи, или, возможно, метод передачи недействителен.

  • Можно ли попытаться загрузить файл через клиент Filezilla, чтобы проверить, работает ли он?
  • Можете ли вы поделиться кодом, который вы используете для подключения к FTP?

Я просмотрел код, который я написал ранее, и мне пришлось добавить следующие строки перед загрузкой файла. Попробуйте это:

import org.apache.commons.net.ftp.FTP;

try (OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(downloadedFile))) {
    // These lines set the type of file to be binary.
    // I had some issues that the file downloaded corrupted.
    ftpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);
    ftpClient.setFileStructure(FTP.FILE_STRUCTURE);
    ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
    ftpClient.setConnectTimeout(timeout);

    ftpClient.retrieveFile(remoteFilePath, outputStream);
}

Кроме того, проверено значение тайм-аута.

...