Загрузите файл, используя http-клиент с FTP-сервера - PullRequest
1 голос
/ 23 мая 2019

У меня есть существующий C++/Qt исходный код для обновления прошивки. HTTP-клиент используется для загрузки файла.

Этот кусок кода работает нормально, если я предоставлю http://<path to file> Но клиент http не смог загрузить с ftp://<path to down load>. Показывает загруженный файл нулевого размера с ftp.

Согласно StackOverflow, он должен работать для обоих. Я пытаюсь использовать setScheme("ftp") и другие небольшие изменения. Но не работает.

void HttpClient::onDownloadProgress(qint64 bytesReceived,
                                        qint64 bytesTotal)
{
    emit downloadUpdateProgress(
        static_cast<int>((bytesReceived * 1.0f / bytesTotal * 1.0f) * 100));
}

void HttpClient::onReadyRead()
{
    auto reply = qobject_cast<QNetworkReply *>(QObject::sender());
    if (reply) {
        QNetworkRequest request(reply->request());
        auto device = qobject_cast<QIODevice *>(request.originatingObject());
        if (device) {
            device->write(reply->readAll());
        }
    }
}

bool HttpClient::post(const QUrl &url, const QByteArray &data,
                          QIODevice *device)
{

    QNetworkRequest request(url);
    request.setHeader(QNetworkRequest::ContentTypeHeader,
                      "application/x-www-form-urlencoded");
    request.setAttribute(QNetworkRequest::CacheLoadControlAttribute,
                         QNetworkRequest::AlwaysNetwork);
    request.setSslConfiguration(getSslConfig());
    request.setOriginatingObject(device);

    QNetworkReply *reply = _networkAccessManager->post(request, data);
    connect(reply, &QNetworkReply::readyRead, this, &HttpClientImpl::onReadyRead);

    bool result = waitForFinished(reply, 30 * 1000);
    return result;
}

bool HttpClientImpl::get(const QUrl &url, QIODevice *device) 
{
    QNetworkRequest request(url);
    request.setSslConfiguration(getSslConfig());
    request.setOriginatingObject(device);

    QNetworkReply *reply = _networkAccessManager->get(request);
    connect(reply, &QNetworkReply::downloadProgress, this,
            &HttpClientImpl::onDownloadProgress);
    connect(reply, &QNetworkReply::readyRead, this, &HttpClientImpl::onReadyRead);

    bool result = waitForFinished(reply);
    return result;
}

Следует загрузить файл правильного размера.

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