カスタム ストリーミング (複数のバイナリ ファイル) でマルチパート MIME メッセージを送信しようとしています。この目的のために、CURLOPT_READFUNCTION
コールバックに によって設定されたポインタを使用させることができませんCURLFORM_STREAM
。
私が知る限り、データのストリーミングを開始すると、CURLFORM_STREAM
ドキュメントはポインターを自動的に呼び出します。CURLOPT_READFUNCTION
これは私には起こっていません。
これが私の現在のコード サンプルです (さまざまな構成を試しましたが成功しませんでした)。エラー時に例外をスローするマクロですCURLCODECHECK
。私自身の構造体のベクトルです。CURLFORMCHECK
streams
StreamData
CURLCODECHECK(curl_easy_setopt(m_Curl, CURLOPT_HTTPPOST, 1L));
CURLCODECHECK(curl_easy_setopt(m_Curl, CURLOPT_READFUNCTION, ::StreamReadFunction));
for (auto iter = streams.begin(); iter != streams.end(); ++iter)
{
std::string const & name = iter->first;
auto streamData = iter->second;
CURLFORMCHECK(curl_formadd(&m_Post, &last,
CURLFORM_COPYNAME, name.c_str(),
CURLFORM_FILENAME, streamData->fileName.c_str(),
CURLFORM_CONTENTTYPE, streamData->mimeType.c_str(),
CURLFORM_STREAM, (void *) streamData.get(),
CURLFORM_CONTENTSLENGTH, streamData->size,
CURLFORM_END));
}
私::StreamReadFunction
は呼び出されますがcurl_easy_setopt()
、CURLOPT_READDATA
set で呼び出さない限り、4 番目の (void * userdata) 引数に null ポインターが渡されます。