1

我在谷歌上找到了这段代码,它基本上通过 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();
        }
    });
4

0 回答 0