QHttpPart类理论总结
- 一、概述
- 二、使用
- 1. 设置头
- 2. 设置内容
一、概述
QHttpPart类保存一个主体部分,用于HTTP multipart MIME消息中(由QHttpMultiPart类表示)。
QHttpPart由一个头块和一个数据块组成,它们由两个连续的新行相互分隔。一个部分的例子是:
Content-Type: text/plain
Content-Disposition: form-data; name="text"
here goes the body
这个例子和下面的图类似,这个也是属于http 发送请求的头,以及内容。这个是常用的,但是不会单独使用,一般会和QHttpMultiPart 使用 通过 QNetworkAccessManager 类的 post(const QNetworkRequest &request, QHttpMultiPart *multiPart) 方法发送这个数据。
二、使用
1. 设置头
要设置首部,可以使用 setHeader() 和 setRawHeader() ,它们的行为与 QNetworkRequest::setHeader() 和 QNetworkRequest::setRawHeader() 完全相同。
2. 设置内容
要读取小块数据,可以使用 setBody(); 对于较大的数据块,如图像,请使用 setBodyDevice()。后一种方法不在内部复制数据,而是直接从设备读取数据,从而节省了内存。这意味着,当包含正文部分的multipart消息通过QNetworkAccessManager::post()在网络上发送时,设备必须是打开并可读的。
要构造一个具有小主体的QHttpPart,考虑以下代码片段(这将产生上面示例中显示的数据):
QHttpPart textPart;
textPart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/plain"));
textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"text\""));
textPart.setBody("here goes the body");
要构建一个从设备(例如文件)读取的QHttpPart,可以应用以下方法:
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);
请注意,QHttpPart在设置时不会获得设备的所有权,因此当不再需要它时,销毁它是开发人员的责任。
一个好主意可能是将multipart消息设置为设备的父对象,如QHttpMultiPart文档中所述。
这个一般不会单独使用,是搭配这 QHttpMultiPart 使用的。