Please nominate your Qt Champions for 2021!

Sending a file to website through post request

  • Hello!

    I am encountering one problem in sending a file with post request. I have a url "" and I must send a post request with similar to php input type=file. I assumed that this should be in the form of a bytearray. However when I send my bytearray to the webserver nothing happens

  • Why you didn't check the forum before posting? On the first page there is already [solved] topic about uploading file to the server. "QNetworkAccessManager uploading files":

  • yes well that solution doesn't work for me :)

  • Moderators

    [quote author="b1gsnak3" date="1365684789"]yes well that solution doesn't work for me :)[/quote]

    and what exactly doesn't work for you? The solution from the topic seems like a legit POST-request to me?
    Show us how your request looks like?

  • I have multiple parameters in my php.. for example a post would look like:


  • Moderators

    if that's all the info you're providing i think nobody will be able to help you.

    What isn't working?
    How you you create the Request?

  • @
    QUrl url;
    url.addQueryItem("a", "upload");
    url.addQueryItem("t", token);
    url.addQueryItem("file", pictureByteArray.toHex());

    QNetworkRequest req;

    QNetworkAccessManager networkAM;, url.encodedQuery());

    connect(&networkAM, SIGNAL(finished(QNetworkReply ), this, SLOT(replyHandler(QNetworkReply)));

  • Just from having a look at the documentation of QNAM::post I can tell that this line can not work.
    @, url.encodedQuery());

  • Well.. This is weird as I get reply from server... Why do you say it will not work?

  • Ok. I have no experience with QNAM, but the doc just mentioned QIODevice, const QByteArray & and QHttpMultiPart * as candidates for the second argument of post. And since QUrl inherits from none of these I thought this could not work.

    I would have tried something like this. But this is just a shot in the dark.
    QUrl url ("");
    url.addQueryItem("a", "upload");
    url.addQueryItem("t", token);
    //url.addQueryItem("file", pictureByteArray.toHex()); Not sure if this is needed with my suggestion

    QNetworkRequest req;

    QNetworkAccessManager networkAM;
    QFile* myImage = new QFile("filePath")
    {, myImage);

  • QUrl::encodedQuery() returns a QByteArray

  • Ahh ok. Sry for the confusion I caused.

    Edit: Maybe the problem is related to this comment from the docs of QNAM::post [quote]data must be open for reading and must remain valid until the finished() signal is emitted for this reply.[/quote]

    The object returned by QUrl::encodedQuery goes out of scope after the function returns ?

  • That is not the problem.. I created a new QByteArray to store the return value but still nothing happens... I think I must create my own model for sending after sniffing what a post method in php sends to the server :( bleah got into software to escape web dev and now i have to do this... Thank you I will submit some code example after I finish (if I finish)

  • ^^ Completely agree on the web dev part. Maybe "the example in the QHtmlMultiPart doc": can be helpful ? Anyways good luck.

  • Try to use "FormPost":

    I have a similar problem when I am starting to code for an API which includes a "HTML Form" for sending files to a server. I used QNAM::post()... tried QHttpMultiPart... but still they won't work. Found out that there is something wrong with QHttpMultiPart and it uses a different specification (RFC 2046).

    FormPost should work. I just modified some parts of it and it worked like a charm. You can visit my "site": for reference.

  • Ty very much I believe this is what I must use I think. xD Will try tomorrow today my head is pounding from head banging the keyboard ^^

  • Ok so QHttpMultiPart doesn't work (wish I would've checked the post sooner, before head banging my head with it, seeing as someone already tried using this). Will try your solution tomorrow, thank you Code_ReaQtor

Log in to reply