私が必要とする機能が Qt が対応できないものではないかどうかはわかりませんが、有効なユースケースが複数あるため、何か間違ったことをしている可能性があり、誰かがすでにこれに対処しているようです。
私がやりたいことは非常に単純です。指定されたコンテンツの長さで POST リクエストを発行し、実際の POST コンテンツをQIODevice
. これには理想的と思われるQNetworkAccessManager
方法があります。QNetworkReply * QNetworkAccessManager::post(const QNetworkRequest & request, QIODevice * data)
コンテンツの長さが大きく (8 GB と仮定します) QIODevice::readData
、ネットワークに何かが送信される前に、Qt がすべてのデータを取得するために呼び出しを試みているようです (少なくとも Wireshark は、コンテンツの長さを小さく設定している間は何も表示しません。たとえば、4 、4バイトが読み取られ、すべてが送信される動作を生成します)。これにより、Qt は実際にはすべての POST コンテンツをバッファリングしたいと考えています。属性を明示的に設定しましたQNetworkRequest::DoNotBufferUploadDataAttribute
が、これは変更されません。
実際にはこのように動作し、私にできることは何もないのかもしれませんが、その場合、単にメモリに収まらない巨大なファイルのアップロードはどのように機能するのでしょうか? とにかく、Qt が実際に全体をバッファリングしているかどうかを確認するためにデバッグしている間、同じ問題を経験した人からのフィードバックを歓迎します。