Qt http上传大文件失败,报错QNetworkReply::ContentNotFoundError
文件大小在0.9G,期间uploadProgress信号的进度回调是正常的,文件已经全部上传了,但在最后结束的时候会卡住很久,可能一分钟左右吧,就给我报错了。
上传小文件的时候是正常的,上传300M的时候,结束时也会卡,但最终提示是成功的。
不明白为什么会报ContentNotFoundError这个的错,所以请问一下会有什么原因
代码如下:
QString baseUrl = “xxx”;
QUrl url(baseUrl);
// key-value
QUrlQuery query;
url.setQuery(query);
ptr_record_accessManager = new QNetworkAccessManager(this);
ptr_record_accessManager->setNetworkAccessible(QNetworkAccessManager::Accessible);
QNetworkRequest request;
request.setUrl(url);
// request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
// request.setHeader(QNetworkRequest::ContentTypeHeader, "multipart/form-data");
// request.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"file\""));
// header(忽略)
QMap<QString, QString> rawHeader;
rawHeader.insert("X-Access-Token",g_current_http_header.X_Access_Token);
rawHeader.insert("X-Tenant-Id",QString("%0").arg(g_current_http_header.X_Tenant_Id));
QMapIterator<QString, QString> iIterator(rawHeader);//添加头部数据
while (iIterator.hasNext()) {
iIterator.next();
qDebug()<<"send_request:::setRawHeader:"<<iIterator.key()<<iIterator.value();
request.setRawHeader(iIterator.key().toLatin1(),iIterator.value().toLatin1());
}
ptr_record_file = new QFile(filenamepath,this);
ptr_record_file->open(QIODevice::ReadOnly);
// 构造文件上传的表单数据
ptr_record_multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
QHttpPart filePart;
filePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"file\"; filename=\""+submit_record_info.fromPath+"\""));//(没有这句也会导致失败)
filePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/octet-stream"));
filePart.setBodyDevice(ptr_record_file);
// ptr_record_file->setParent(ptr_record_multiPart);
ptr_record_multiPart->append(filePart);
// 设置头部标志
request.setHeader(QNetworkRequest::ContentTypeHeader,"multipart/form-data;boundary=" + ptr_record_multiPart->boundary()); //去掉boundary上的双引号(这句很关键,没有就失败了)
// request.setAttribute(QNetworkRequest::HTTP2AllowedAttribute, false);
//发送上传请求
ptr_record_reply = ptr_record_accessManager->post(request, ptr_record_multiPart);
// ptr_record_multiPart->setParent(ptr_record_reply);
connect(ptr_record_accessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(record_replyFinished(QNetworkReply*)));
connect(ptr_record_reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(record_loadError(QNetworkReply::NetworkError)));
connect(ptr_record_reply, SIGNAL(uploadProgress(qint64 ,qint64)), this, SLOT(record_loadProgress(qint64 ,qint64)));