Important: Please read the Qt Code of Conduct -

QHttpMultiPart file upload

  • Hi, I am trying to upload file from the Qt app to the server, from QHttpMultiPart doc copied this code

    void FileUploader::postProcesser3()
        qDebug() << "uploading 3";
        QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
        QHttpPart textPart;
        textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"text\""));
        textPart.setBody("my text");
        QHttpPart imagePart;
        imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/jpeg"));
        imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"image\"; filename=\"1.jpg\""));
        QFile *file = new QFile("1.jpg");
        qDebug() << file->open(QIODevice::ReadOnly);
        file->setParent(multiPart); // we cannot delete the file now, so delete it with the multiPart
        QUrl url("http://localhost/medialinks/ci/index.php/data/fileupload_test/");
        QNetworkRequest request(url);
        //QNetworkAccessManager manager;
        QNetworkAccessManager * manager = new QNetworkAccessManager();
        QNetworkReply *reply = manager->post(request, multiPart);
        multiPart->setParent(reply); // delete the multiPart with the reply
        // here connect signals etc.
        connect(manager, SIGNAL(finished(QNetworkReply*)), SLOT(replyFinished(QNetworkReply*)));
        connect(reply, SIGNAL(uploadProgress(qint64,qint64)), this, SLOT(SlotSetProgressLevel(qint64, qint64)));
        connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),
                 this, SLOT  (uploadError(QNetworkReply::NetworkError)));
    void FileUploader::uploadError(QNetworkReply::NetworkError)
        qDebug() << "error";
    void FileUploader::SlotSetProgressLevel(qint64, qint64)
        qDebug() << "uploading progress";
    void FileUploader::replyFinished(QNetworkReply* reply)
        qDebug() << "upload finished";
        qDebug() << reply->readAll();

    but I don't get any error or finished signal but the file also not uploaded. This is the debugging result

    uploading 3
    true QSslSocket: cannot resolve SSLv2_client_method QSslSocket: cannot resolve SSLv2_server_method

    this is server script it's in codeigniter(php)

    public function fileupload_test()
    		$config['upload_path'] = $this->config->item('server_path').'data/event/'.'w_full';
    		$config['file_name'] = "f.jpg";
    		$config['allowed_types'] = '*';
    			//upload error
    			echo "file uploading failed";
    			// remove created posts
    		} else {
    			// success, add data to database
    			echo 'success';


  • If you connect to QNetworkAccessManager::sslErrors(QNetworkReply *, const QList<QSslError> &) signal it will probably be more clear what's going on. My guess is that your program can't find OpenSSL. Did you try adding the path to the OpenSSL binaries to the Project->Run Environment in Qt Creator (assuming you use that)?

  • @VRonin, I tried that

    connect(manager, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
                 this, SLOT  (uploadError2(QNetworkReply *, QList<QSslError>)));
    void FileUploader::uploadError2(QNetworkReply* reply,QList<QSslError> list)
        qDebug() << list << reply->readAll();

    debug result

    uploading 3
    true QSslSocket: cannot resolve SSLv2_client_method QSslSocket: cannot resolve SSLv2_server_method

    In my previous project i got this ssl socket error but it work fine, one developer advise me to ignore it, it's some error in libssl

  • I don't understand what going on with this code but if I move this code to mainwindow class it's work perfectly with the above mentioned error QSslSocket: cannot resolve SSLv2_client_method QSslSocket: cannot resolve SSLv2_server_method

  • This post is deleted!

  • my class deceleration is

    #ifndef FILEUPLOADER_H
    #define FILEUPLOADER_H
    #include <QThread>
    #include <QNetworkReply>
    #include <QList>
    class FileUploader : public QThread
        void run();
        void postProcesser();
        void postProcesser2();
        void postProcesser3();
    private slots:
        void replyFinished(QNetworkReply *reply);
        void SlotSetProgressLevel(qint64, qint64);
        void uploadError(QNetworkReply::NetworkError);
        void uploadError2(QNetworkReply *reply, QList<QSslError> list);
    #endif // FILEUPLOADER_H

  • sorry guys my mistake I initialize the class like

    Updater update;

    so when the function finish executing it also delete my methord

    now I am initialize

    Updater *updatedata = new Updater;

    it works, sorry for wasting time

Log in to reply