使用先前QNAM请求的QNetworkReply作为QHttpMultiPart主体

时间:2017-03-06 08:10:11

标签: c++ qt http post qnetworkaccessmanager

在我的应用程序中,我需要将一个大文件发送到另一个HTTP位置,该文​​件可通过HTTP位置获得,而无需将整个文件加载到内存中。

我已经尝试传递从前一个QNAM请求而不是QFile收到的QNetworkReply,但没有运气:代码编译并开始下载very_large_file.bin没有问题,但没有发出POST请求:

QNetworkRequest request(QUrl("http://mylocation/very_large_file.bin"));
QNetworkReply *reply = nm.post(request, &multipart);
QHttpMultiPart multipart(QHttpMultiPart::FormDataType);

QHttpPart filePart;
filePart.setHeader(QNetworkRequest::ContentTypeHeader,
  QVariant("application/octet-stream"));
filePart.setHeader(QNetworkRequest::ContentDispositionHeader,
  QVariant("form-data; name=\"myfile\"; filename=\"test.bin\""));
filePart.setBodyDevice(reply); // working fine if I pass QFile instead of QNetworkReply


QNetworkRequest request(QUrl("http://myanotherlocation/post.php"));
QNetworkReply *reply = nm.post(request, &multipart);

通过搜索Google中的一些信息,我发现问题是我正在尝试传递顺序QIODevice,而由于某些原因,QNAM只适用于非顺序QIODevice-s,所以我需要实现一个将QNetworkReply转换为QNAM可以理解的东西的包装器。

有人能为我提供一个最小的工作示例吗?有必要将very_large_file.bin从mylocation转移到myanotherlocation chunk-by-chunk,而不是从完全加载到内存。

0 个答案:

没有答案