QHttpMultiPart проблема границы файла загрузки - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь загрузить некоторые файлы на сервер, используя QHttpMultiPart. Следующий файл версии - только пример. По какой-то причине Qt автоматически добавит границу в файлы. Тем не менее, я действительно загрузил файлы .tar.gz, и они будут считаться поврежденными, если такие границы были добавлены.

    int main(int argc, char *argv[])
    {

        QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
        QGuiApplication app(argc, argv);

        QNetworkAccessManager *netManager = new QNetworkAccessManager();
        HTTPFirmwareUpgrader upgrader(netManager,"http://mytest.com");
        upgrader.upgradeCIU();

        return app.exec();
    }

    void HTTPFirmwareUpgrader::upgradeCIU()
    {
        QString filename = "version";
        QString filePath = QString("C:/Users/User/Desktop/HTTP/%1").arg(filename);
        qDebug() << uploadFirmware(filename, filePath);
    }

    bool HTTPFirmwareUpgrader::uploadFirmware(const QString &filename, const QString &filePath)
    {
        QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);

        QHttpPart myPart;
        QFile *file = new QFile(filePath);
        if(!file->exists())
            qWarning() << "File DOES NOT exists";

        file->open(QIODevice::ReadOnly);
        myPart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("form-data"));
        myPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"version\"; filename=\"version\""));
        myPart.setBodyDevice(file);
        file->setParent(multiPart);

        multiPart->append(ciu);

        QByteArray resp = this->post(createUploadRequest(QString("filename=%1").arg(filename)),
                                     multiPart, file);
        qDebug() << "Upload Filrmware " << resp;

        return resp != "";
    }

    QByteArray HTTPFirmwareUpgrader::post(QUrl url, QHttpMultiPart *multiPart, QFile *file)
    {
        QNetworkRequest request;
        QEventLoop loop;
        request.setUrl(url);

        request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("multipart/form-data"));
        QNetworkReply *reply = m_manager->post(request, multiPart);
        connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
        loop.exec();
        multiPart->setParent(reply);
        reply->deleteLater();

        return reply->readAll();
}

Это оригинальный файл версии: введите описание изображения здесь

И это файл версии, который был передан: введите описание изображения здесь

А если я не установлю заголовок для запроса, размер передаваемого файла будет 0.

Кто-нибудь знает, что мне делать?

1 Ответ

0 голосов
/ 03 мая 2018

Проблема решена !!! Оказывается, я использую неправильный способ загрузки файла. Мне нужно использовать QIODevice вместо QMultipart.

...