我在谷歌上找到了这段代码,它基本上通过 cpprest 以异步模式将文件上传到 HTTP 服务器。如果我有足够的资源(我是 PPL 和 cpprest 的新手,并且在 msdn 上阅读了很多网页),我创建一个从 out.txt 打开 ifstream 的任务,然后创建另一个使用文件的 PUT 方法发出 HTTP 请求的任务流作为上一个任务的输入的主体。
如果它是正确的......从服务器端:1)如何使用文件流管理 PUT 方法?2)我需要打开一个与输入文件同名的文件,是否可以从正文 HTTP PUT 中提取此信息,或者我需要将此信息放入“out.txt”中?
// Upload a file to an HTTP server.
pplx::task<void> UploadFileToHttpServerAsync()
{
using concurrency::streams::file_stream;
using concurrency::streams::basic_istream;
// To run this example, you must have a file named out.txt in the current folder.
// Open stream to file.
wstring filePath = L"out.txt";
return file_stream<unsigned char>::open_istream(L"filePath").then([](pplx::task<basic_istream<unsigned char>> previousTask)
{
try
{
auto fileStream = previousTask.get();
http_client client(L"http://localhost:80");
return client.request(methods::PUT, L"filePath", fileStream).then([fileStream](pplx::task<http_response> previousTask)
{
fileStream.close();
std::wostringstream ss;
try
{
auto response = previousTask.get();
ss << L"Server returned returned status code " << response.status_code() << L"." << std::endl;
}
catch (const http_exception& e)
{
ss << e.what() << std::endl;
}
std::wcout << ss.str();
});
}
catch (const std::system_error& e)
{
std::wostringstream ss;
ss << e.what() << std::endl;
std::wcout << ss.str();
// Return an empty task.
return pplx::task_from_result();
}
});