测试环境:win10、Qt Creator 4.11.1、5.14.2版本SDK
先记录代码,后续知识待补充……
bool isOpen = true;
QNetworkRequest request(m_url);
QHttpMultiPart* multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
QJsonArray::iterator begin = m_uploadArray.begin(); //m_uploadArray存储QJsonObject,QJsonObject存储数据是[key] = name值,[value]=填充body内容
while(begin != m_uploadArray.end())
{
QHttpPart part;
QJsonObject obj = begin->toObject();
if(obj.value("key").toString() != "fileKey")
{
QString name = QString("form-data;name=\"%1\"").arg(obj.value("key").toString());
part.setHeader(QNetworkRequest::ContentDispositionHeader,name);
part.setBody(obj.value("value").toVariant().toByteArray());
}
else
{
QFile* imgFile = new QFile(“待上传文件路径”);
QFileInfo fileInfo(m_filePath);
if(imgFile->open(QIODevice::ReadOnly))
{
QString name = QString("form-data; name=\"%1\"; filename=\"%2\"").arg(obj.value("value").toString()).arg(fileInfo.fileName());
part.setHeader(QNetworkRequest::ContentDispositionHeader,name);
if(!contentType.isEmpty())
{
part.setHeader(QNetworkRequest::ContentTypeHeader,contentType.value("value").toVariant().toByteArray());
}
part.setBodyDevice(imgFile);
imgFile->setParent(multiPart);
multiPart->append(part);
}
else
{
delete imgFile;
isOpen = false;
break;
}
}
multiPart->append(part);
++begin;
}
if(isOpen)
{
QNetworkReply* currentReply = m_netManager->post(request, multiPart);
multiPart->setParent(currentReply); //防止内存泄漏,添加到对象树
connect(currentReply, &QNetworkReply::finished, &eventLoop, &QEventLoop::quit);
}
else
{
delete multiPart;
}