测试环境: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(“待上传文件路径”);if(imgFile->open(QIODevice::ReadOnly)){QString name = QString("form-data;name=\"%1\"").arg(obj.value("value").toString()); //注意:从value中那name值,自己可以改进part.setHeader(QNetworkRequest::ContentDispositionHeader,name);part.setBodyDevice(imgFile);imgFile->setParent(multiPart); //防止内存泄漏,添加到对象树}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;
}