Загрузка фрагмента с помощью OneDrive Rest API

это первый раз, когда я пишу на StackOverflow. Мой вопрос заключается в следующем.

Я пытаюсь написать 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. Я обнаружил, что загрузка файлов фрагментами кажется невозможной (загрузка по частям (возобновляемая загрузка) для OneDrive?). Это верно и для загрузки?

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

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

Джузеппе


person Giuseppe Rossini    schedule 22.09.2014    source источник


Ответы (1)


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

Например,

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

Это позволит получить первый КБ файла.

person Brad    schedule 22.09.2014
comment
Спасибо тебе за это! Насколько вы знаете, можно ли также указать эти заголовки для загрузки файла? - person Giuseppe Rossini; 24.09.2014
comment
Диапазон означает только HTTP-запросы на поиск, такие как то, что вы делаете выше. Теоретически заголовок Content-Range можно использовать для облегчения механизма загрузки по частям, однако, как вы узнали из другого ответа, OneDrive в настоящее время НЕ поддерживает такую ​​семантику. - person Brad; 24.09.2014
comment
Теперь есть некоторая документация, описывающая, как фрагментированная загрузка может работать с OneDrive. Прочтите gist.github.com/rgregg/37ba8929768a62131e85 и посмотрите, подойдет ли он вам. сценарий - person Brad; 16.12.2014