2014-09-22 65 views
0

这是我第一次在StackOverflow上编写。我的问题如下。使用OneDrive Rest API进行块下载API

我想写基础上,cpprest SDK卡萨布兰卡项目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文件的一部分。我发现上传块文件看起来似乎不可能(Chunked upload (resumable upload) for OneDrive?)。这是否也适用于下载?

预先感谢您的时间。

此致

朱塞佩

回答

1

OneDrive支持字节范围读取。所以你应该可以通过添加一个Range头部来请求任意大小的块。

例如,

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

这将获取文件的第一个字节。

+0

谢谢你!据你所知,也可以指定这些头文件上传的文件? – 2014-09-24 10:29:04

+0

范围仅指HTTP检索请求,例如您在上面执行的操作。从理论上讲,Content-Range标头可以用来促进分块上传机制,但是,从另一个答案中发现OneDrive目前不支持这种语义。 – Brad 2014-09-24 18:22:31

+0

现在有一些文档描述了分块上载如何抵制OneDrive。阅读https://gist.github.com/rgregg/37ba8929768a62131e85,看看它是否适合你的情况 – Brad 2014-12-16 17:41:58