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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值