在我的应用程序中,我需要将一个大文件发送到另一个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,而不是从完全加载到内存。