我正在尝试将非常大的字符串(价值高达 16GB)发送到云服务器(类似于 AWS),以便使用 REST API 作为文件存储。我想以较小的块将字符串流式传输到服务器,并且字符串块将即时生成。据我所知,将传输编码设置为“分块”将帮助我做到这一点。我已经开始使用 libcurl 库编写一个 C++ 程序来执行此操作。这是一个带有简化测试字符串的相关片段:
headers = curl_slist_append(headers, "Accept: text/plain");
headers = curl_slist_append(headers, "Content-Type: binary/octet-stream");
headers = curl_slist_append(headers, "Transfer-Encoding: chunked");
curl_easy_setopt(curl, CURLOPT_VERBOSE, true);
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_URL, "http://192.168.0.1:8080/namespace/test/test");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "5/r/nHELLO/r/n");
curl_res = curl_easy_perform(curl);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "3/r/nBYE/r/n");
curl_res = curl_easy_perform(curl);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "0/r/n");
curl_res = curl_easy_perform(curl);
根据我对分块传输的理解,每个块应该以十六进制数字表示的字符串大小开头,然后是实际字符串。当大小遇到零时,服务器知道传输已完成(http://en.wikipedia.org/wiki/Chunked_transfer_encoding)。但是,当我在执行上述操作后查看文件的内容时,我看到的只是“0”而不是“HELLOBYE”。因此,它不仅在每次块传输时覆盖文件,而且还将字符串的大小解释为字符串的一部分。
所以我的问题归结为:
- 如何让它将我的块传输的第一部分解释为字符串的大小?
- 我怎样才能让它“连接”顺序块传输?