Qt POST multipart/form-data 上传文件 多参数


void MySpaceView::sendloadFile(QString serverUrl, QString loadFileUrl,int id)
{
    QFileInfo fileInfo(loadFileUrl);
    QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType,this);
    QFile *file = new QFile(loadFileUrl);
    QHttpPart dbFilePart;
    QString requestFormat = QString::fromUtf8("form-data;name=%1;filename=%2;type = application/octet-stream")
    .arg("file")
    .arg(fileInfo.fileName());
    dbFilePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(requestFormat));

    bool bopen = file->open(QIODevice::ReadOnly);
    dbFilePart.setBodyDevice(file);

    QHttpPart dirID;
    dirID.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"parentDirect\""));
    QByteArray dirIDbyte = QString::number(id).toLatin1();
    dirID.setBody(dirIDbyte);

    QHttpPart sourceType;
    sourceType.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"sourceType\""));
    sourceType.setBody("CLOUD");

    QHttpPart fileTypeP;
    fileTypeP.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"fileType\""));
    QByteArray fileType = QString::number(2401).toLatin1();
    fileTypeP.setBody(fileType);


    multiPart->append(dbFilePart);
    multiPart->append(dirID);
    multiPart->append(sourceType);
    multiPart->append(fileTypeP);

    QByteArray token = Login::getInstance()->getHeader();
    QNetworkRequest request;
    request.setUrl(serverUrl);
    request.setRawHeader("Authorization", token);
    QNetworkAccessManager *manager = new QNetworkAccessManager(this);
    QNetworkReply *reply=manager->post(request,multiPart);
    multiPart->setParent(reply);

//    QByteArray token = Login::getInstance()->getHeader();
//    QNetworkRequest request;
//    request.setUrl(serverUrl);
//    request.setRawHeader("Authorization", token);
//    //request.setHeader(QNetworkRequest::ContentTypeHeader, "multipart/form-data");
//    QNetworkAccessManager *manager =new QNetworkAccessManager();
//    QNetworkReply *reply = manager->post(request,multiPart);
//    multiPart->setParent(reply);

    QObject::connect(reply, &QNetworkReply::readyRead, [=]() {
        QByteArray array = reply->readAll();
        qDebug()<<array;
           //file->close();
       });
 QObject::connect(reply, &QNetworkReply::finished , [=]() {

        
       });

}

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用Qt C++实现上传form-data并上传zip文件的示例代码。其中,使用了QHttpMultiPart和QNetworkAccessManager两个类来实现: ```cpp void uploadZipFile() { QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType); // 添加zip文件 QHttpPart filePart; filePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/zip")); filePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"file\"; filename=\"test.zip\"")); QFile *file = new QFile("test.zip"); file->open(QIODevice::ReadOnly); filePart.setBodyDevice(file); file->setParent(multiPart); multiPart->append(filePart); QNetworkAccessManager *manager = new QNetworkAccessManager(this); QNetworkRequest request(QUrl("http://example.com/upload")); QNetworkReply *reply = manager->post(request, multiPart); multiPart->setParent(reply); connect(reply, &QNetworkReply::finished, [=]() { QString response = QString::fromUtf8(reply->readAll()); qDebug() << response; reply->deleteLater(); }); } ``` 在上述代码中,我们只需要添加一个QHttpPart来表示zip文件部分,然后将其添加到QHttpMultiPart中即可。设置QHttpPart的ContentTypeHeader为"application/zip",ContentDispositionHeader为"form-data; name=\"file\"; filename=\"test.zip\"",其中,filename表示上传的文件名。其余部分与上传文本和图片部分的代码相同。完成后,通过QNetworkReply::finished信号来获取响应数据。 使用时,只需要在需要上传zip文件的地方调用uploadZipFile()函数即可。需要注意的是,示例代码中使用的URL是一个示例,实际使用时需要替换成正确的URL。同时,需要确保上传的zip文件路径正确。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值