我不确定我需要的功能是不是Qt不具备的功能但似乎因为有多个有效的用例可能我做错了什么并且有人已经处理过这个。
我想做的事情非常简单 - 我想发出一个具有给定内容长度的POST请求,并从QIODevice
动态提供实际的POST内容。 QNetworkAccessManager
有一个方法QNetworkReply * QNetworkAccessManager::post(const QNetworkRequest & request, QIODevice * data)
,这似乎是理想的。内容长度很大(假设为8 GB),似乎Qt尝试调用QIODevice::readData
来获取所有数据,然后才向网络发送任何数据(至少Wireshark没有显示任何内容,而设置的内容很少) length,例如4,产生读取4个字节并传输所有内容的行为。这让我相信Qt实际上想要缓冲所有的POST内容。我已经明确设置了QNetworkRequest::DoNotBufferUploadDataAttribute
属性,但这并没有改变这一点。
它可能实际上是这样的,我无能为力,但在这种情况下,如何大量文件上传根本不适合内存工作?无论如何,在我调试Qt实际上是在缓冲整个事情时,欢迎来自遇到相同问题的人的任何反馈。