QNetworkAccessManager: posten van bestanden via HTTP

Ik moet QNetworkAccessManager gebruiken om meerdere bestanden op een apache-server te uploaden met PHP.

Ik vraag hier omdat ik onbekend ben met Python ad QT (PySide) en ik zou graag willen weten of iemand een tutorial of voorbeeld van code (in python) heeft om dit aan te tonen.

Opmerking: als dit soort inhoud niet beschikbaar is, probeer ik het zelf te doen en deel ik daarna een zelfstudie.

1
Te beginnen met Qt 4.8 (en pyside 1.0.8), kunt u QHttpMultiPart gebruiken.
toegevoegd de auteur alexisdm, de bron
Ik werk met QT 4.7 maar bedankt voor de link :)!
toegevoegd de auteur Fy-, de bron

1 antwoord

Ik weet niet of dit de beste manier is, maar het werkt prima.

    class Upload():
        def __init__(self):
            self.url     = QUrl("http://www.website.com/up.php")
            self.manager = QtNetwork.QNetworkAccessManager()

        def sendRequest(self, replayfile):
            self.request = QtNetwork.QNetworkRequest(self.url)              

            self.request.setRawHeader("Host", str(self.url.host()));
            self.request.setRawHeader("Content-type", "multipart/form-data; boundary=AaB03x");

            fp = QFile(replayfile)
            fp.open(QIODevice.ReadOnly)
            bytes = QByteArray()

            bytes.append("--AaB03x\r\n")
            bytes.append("Content-Disposition: ")
            bytes.append("form-data; name=\"replay\"; filename=\"" + QByteArray(str(QFileInfo(replayfile).fileName())) + "\"\r\n")
            bytes.append("Content-Type: %s\r\n"%mimetypes.guess_type(str(replayfile))[0])
            bytes.append("\r\n")
            bytes.append(fp.readAll())

            fp.close()       

            bytes.append("\r\n")
            bytes.append("--AaB03x--")

            contentLength = bytes.length()
            self.request.setRawHeader("Content-Length", "%s" % contentLength)       

            self.manager.post(self.request, bytes)  

In PHP:

    Array
    (
        [replay] => Array
            (
                [name] => test.SC2Replay
                [type] => None
                [tmp_name] => /tmp/phpK6tChh
                [error] => 0
                [size] => 9882
            )

    )
3
toegevoegd