最近项目需要用QT上传文件给HTTP服务器。之前服务器接收的数据格式都是json,这次是form-data。
经查找资料,需要用到QHttpMultiPart和QHttpPart这两个类,看QT的实例教程可知
例程中给出了文本和图片的传输方式,本次主要记录下exce文件的代码
QString xlname = "text.xlsx";
QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
QHttpPart imagePart;
imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/xlsx"));
imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"file\"; filename=\""+ xlname + "\"")); // file为后端定义的key,filename即为excel文件名
QFile *file = new QFile(pathbuf1);//pathbuf1 为文件路径
file->open(QIODevice::ReadOnly);
imagePart.setBodyDevice(file);
file->setParent(multiPart);
multiPart->append(imagePart);
QUrl url("http://xxxxxxxxxx");
QNetworkRequest netReq;
netReq.setUrl(url);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(send_xlsdata(QNetworkReply*)));
manager->post(netReq,multiPart);
注: 以form-data格式上传文件时 setHeader()函数的参数中一定要包含 name和filename 缺一不可。