0

这是我第一次在 StackOverflow 上写作。我的问题如下。

我正在尝试基于 cpprest sdk CasaBlanca 项目编写 OneDrive C++ API:

https://casablanca.codeplex.com/

特别是,我目前正在对 OneDrive 文件执行读取操作。

实际上,我已经能够使用以下代码下载整个文件:

http_client api(U("https://apis.live.net/v5.0/"), m_http_config);

api.request(methods::GET, file_id +L"/content" ).then([=](http_response response){
    return response.body();
}).then([=]( istream is){
    streambuf<uint8_t> rwbuf = file_buffer<uint8_t>::open(L"test.txt").get();
    is.read_to_end(rwbuf).get();
    rwbuf.close();
}).wait()

这段代码基本上是在计算机上下载整个文件(file_id 是我要下载的文件的 id)。当然,我可以从文件中提取输入流并使用它来读取文件。

但是,如果文件很大,这可能会给我带来问题。我的想法是在调用者读取文件时下载文件的一部分(如果他回来,则缓存该部分)。

那么,我的问题是:

是否可以使用 OneDrive REST + cpprest 下载存储在 OneDrive 上的文件的一部分。我发现分块上传文件似乎显然是不可能的(OneDrive 的分块上传(可恢复上传)?)。下载也是如此吗?

提前感谢您的宝贵时间。

此致,

朱塞佩

4

1 回答 1

1

OneDrive 支持字节范围读取。因此,您应该能够通过添加 Range 标头来请求您想要的任何大小的块。

例如,

GET /v5.0/<fileid>/content
Range: bytes=0-1023

这将获取文件的第一个 KB。

于 2014-09-22T18:22:14.283 回答