当前位置: 代码迷 >> 综合 >> Qt——功能:HTTP表单上传参考代码
  详细解决方案

Qt——功能:HTTP表单上传参考代码

热度:57   发布时间:2024-02-12 11:42:34.0

测试环境: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;
}

 

  相关解决方案