2014-09-22 2 views
0

это первый раз, когда я пишу на StackOverflow. Мой вопрос следующий.Chunk загрузить с OneDrive Rest API

Я пытаюсь написать API OneDrive C++ на основе cpprest SDk проекта CasaBlanca:

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 является идентификатор файла, который я пытаюсь скачать). Конечно, я могу извлечь входной поток из файла и использовать его для чтения файла.

Однако это может привести к возникновению проблем, если файл большой. То, что я имел в виду, это загрузить часть файла, пока вызывающий его читал (и кэшировал эту часть, если он вернулся).

Тогда мой вопрос будет:

Можно ли, используя OneDrive REST + cpprest загрузив часть файла, хранящегося на OneDrive. Я обнаружил, что загрузка файлов в куски кажется, по-видимому, невозможной (Chunked upload (resumable upload) for OneDrive?). Это правда и для загрузки?

Заранее благодарю вас за ваше время.

С наилучшими пожеланиями,

Джузеппе

ответ

1

OneDrive поддерживает диапазон байтов читает. И поэтому вы должны иметь возможность запрашивать куски любого размера, добавляя заголовок Range.

Например,

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

Это загрузит первый килобайт файла.

+0

Спасибо за это! Насколько вам известно, также можно указать эти заголовки для загрузки файла? –

+0

Диапазон означает только запросы HTTP-поиска, такие как то, что вы делаете выше. Теоретически заголовок Content-Range может использоваться для облегчения механизма загрузки каналов, однако, как вы обнаружили из другого ответа, OneDrive в настоящее время не поддерживает такую ​​семантику. – Brad

+0

В настоящее время имеется документация, описывающая, как пакетная загрузка может работать против OneDrive. Прочитайте https://gist.github.com/rgregg/37ba8929768a62131e85 и посмотрите, работает ли он для вас. – Brad