QHttpPart Class
Die Klasse QHttpPart enthält einen Körperteil, der innerhalb einer HTTP-Multipart-MIME-Nachricht verwendet werden soll. Mehr...
Kopfzeile: | #include <QHttpPart> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake: | QT += network |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QHttpPart ist Teil von Network Programming API und Implicitly Shared Classes.
Öffentliche Funktionen
QHttpPart() | |
QHttpPart(const QHttpPart &other) | |
~QHttpPart() | |
void | setBody(const QByteArray &body) |
void | setBodyDevice(QIODevice *device) |
void | setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value) |
void | setRawHeader(const QByteArray &headerName, const QByteArray &headerValue) |
void | swap(QHttpPart &other) |
bool | operator!=(const QHttpPart &other) const |
QHttpPart & | operator=(const QHttpPart &other) |
bool | operator==(const QHttpPart &other) const |
Verwandte Nicht-Mitglieder
(since 6.8) QDebug | operator<<(QDebug debug, const QHttpPart &part) |
Detaillierte Beschreibung
Die Klasse QHttpPart enthält einen Körperteil, der innerhalb einer HTTP-Multipart-MIME-Nachricht verwendet wird (die durch die Klasse QHttpMultiPart dargestellt wird). Ein QHttpPart besteht aus einem Header-Block und einem Datenblock, die durch zwei aufeinanderfolgende neue Zeilen voneinander getrennt sind. Ein Beispiel für einen Part wäre:
Content-Type: text/plain Content-Disposition: form-data; name="text" here goes the body
Zum Setzen von Kopfzeilen verwenden Sie setHeader() und setRawHeader(), die sich genau wie QNetworkRequest::setHeader() und QNetworkRequest::setRawHeader() verhalten.
Zum Lesen von kleinen Datenblöcken verwenden Sie setBody(); für größere Datenblöcke, wie z. B. Bilder, verwenden Sie setBodyDevice(). Die letztgenannte Methode spart Speicher, da die Daten nicht intern kopiert, sondern direkt vom Gerät gelesen werden. Das bedeutet, dass das Gerät zu dem Zeitpunkt geöffnet und lesbar sein muss, an dem die mehrteilige Nachricht, die den Hauptteil enthält, über QNetworkAccessManager::post() über das Netzwerk gesendet wird.
Um einen QHttpPart mit einem kleinen Body zu konstruieren, betrachten Sie das folgende Snippet (dies erzeugt die im obigen Beispiel gezeigten Daten):
QHttpPart textPart; textPart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/plain")); textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"text\"")); textPart.setBody("here goes the body");
Um einen QHttpPart zu konstruieren, der von einem Gerät (z. B. einer Datei) gelesen wird, kann Folgendes angewendet werden:
QHttpPart imagePart; imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/jpeg")); imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"image\"")); imagePart.setRawHeader("Content-ID", "my@content.id"); // add any headers you like via setRawHeader() QFile *file = new QFile("image.jpg"); file->open(QIODevice::ReadOnly); imagePart.setBodyDevice(file);
Seien Sie sich bewusst, dass QHttpPart nicht das Eigentum am Gerät übernimmt, wenn es gesetzt wird, so dass es in der Verantwortung des Entwicklers liegt, es zu zerstören, wenn es nicht mehr benötigt wird. Eine gute Idee wäre es, die Multipart-Nachricht als übergeordnetes Objekt für das Gerät zu setzen, wie in der Dokumentation für QHttpMultiPart dokumentiert.
Siehe auch QHttpMultiPart und QNetworkAccessManager.
Dokumentation der Mitgliedsfunktionen
QHttpPart::QHttpPart()
Konstruiert ein leeres QHttpPart-Objekt.
QHttpPart::QHttpPart(const QHttpPart &other)
Erzeugt eine Kopie von other.
[noexcept]
QHttpPart::~QHttpPart()
Zerstört diese QHttpPart.
void QHttpPart::setBody(const QByteArray &body)
Setzt den Body dieses MIME-Teils auf body. Der mit dieser Methode gesetzte Body wird verwendet, sofern das Gerät nicht über setBodyDevice() gesetzt wird. Für große Datenmengen (z. B. ein Bild) verwenden Sie setBodyDevice(), das die Daten nicht intern kopiert.
Siehe auch setBodyDevice().
void QHttpPart::setBodyDevice(QIODevice *device)
Setzt das Gerät, von dem der Inhalt gelesen werden soll, auf device. Bei großen Datenmengen sollte diese Methode setBody() vorgezogen werden, da der Inhalt bei dieser Methode nicht kopiert, sondern direkt vom Gerät gelesen wird. device muss geöffnet und lesbar sein. QHttpPart übernimmt nicht das Eigentum an device, d.h. das Gerät muss geschlossen und gegebenenfalls zerstört werden. wenn device sequentiell ist (z.B. Sockets, aber nicht Dateien), sollte QNetworkAccessManager::post() aufgerufen werden, nachdem device finished() ausgegeben hat. Um das Gerät zu deaktivieren und die über setBody() eingestellten Daten zu verwenden, verwenden Sie "setBodyDevice(0)".
Siehe auch setBody() und QNetworkAccessManager::post().
void QHttpPart::setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value)
Setzt den Wert der bekannten Kopfzeile header auf value und überschreibt damit alle zuvor gesetzten Kopfzeilen.
Siehe auch QNetworkRequest::KnownHeaders, setRawHeader(), und QNetworkRequest::setHeader().
void QHttpPart::setRawHeader(const QByteArray &headerName, const QByteArray &headerValue)
Setzt den Header headerName auf den Wert headerValue. Wenn headerName einer bekannten Kopfzeile entspricht (siehe QNetworkRequest::KnownHeaders), wird das Rohformat geparst und die entsprechende "gekochte" Kopfzeile ebenfalls gesetzt.
Hinweis: Wird derselbe Header zweimal gesetzt, wird die vorherige Einstellung überschrieben. Um das Verhalten mehrerer gleichnamiger HTTP-Header zu erreichen, sollten Sie die beiden Werte durch ein Komma (",") getrennt aneinanderhängen und einen einzigen Raw-Header setzen.
Siehe auch QNetworkRequest::KnownHeaders, setHeader(), und QNetworkRequest::setRawHeader().
[noexcept]
void QHttpPart::swap(QHttpPart &other)
Tauscht diesen HTTP-Teil mit other aus. Dieser Vorgang ist sehr schnell und schlägt nie fehl.
bool QHttpPart::operator!=(const QHttpPart &other) const
Gibt true
zurück, wenn dieses Objekt nicht mit other identisch ist.
Siehe auch operator==().
QHttpPart &QHttpPart::operator=(const QHttpPart &other)
Erzeugt eine Kopie von other.
bool QHttpPart::operator==(const QHttpPart &other) const
Gibt true
zurück, wenn dieses Objekt dasselbe ist wie other (d. h. wenn sie dieselben Kopfzeilen und denselben Textkörper haben).
Siehe auch operator!=().
Verwandte Nicht-Mitglieder
[since 6.8]
QDebug operator<<(QDebug debug, const QHttpPart &part)
Schreibt die part zu Debugging-Zwecken in das debug Objekt. Wenn kein Gerät eingestellt ist, wird die Größe des Körpers angezeigt.
Diese Funktion wurde in Qt 6.8 eingeführt.
Siehe auch Debugging-Techniken.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.