2014-09-22 6 views
0

이것은 StackOverflow에서 처음 작성한 것입니다. 내 질문은 다음과 같습니다.OneDrive Rest API로 청크 다운로드

나는 cpprest SDK 카사 블랑카 프로젝트를 기반으로 원 드라이브 C++ API를 작성하는 것을 시도하고있다 : 특히

https://casablanca.codeplex.com/

, 나는 현재 원 드라이브 파일에 대한 읽기 작업을 구현하고있다.

사실, 나는 다음과 같은 코드로 전체 파일을 다운로드 할 수 있었다 :

이 코드는 기본적으로 FILE_ID 내가하려고하고있는 파일의 ID입니다 (컴퓨터에 전체 파일을 다운로드하는
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() 

다운로드). 물론 파일로부터 입력 스트림을 추출하여 파일을 읽는 데 사용할 수 있습니다.

그러나 파일 크기가 커지면이 문제가 발생할 수 있습니다. 내가 염두에두고 있던 것은 호출자가 파일을 읽는 동안 파일의 일부를 다운로드하는 것이었다.

그런 다음, 내 질문은 다음과 같습니다

는 원 드라이브에 저장된 파일의 일부를 다운로드 cpprest 원 드라이브 REST +를 사용 가능한가. 나는 덩어리로 파일을 업로드하는 것이 분명히 불가능한 것 같습니다 ( Chunked upload (resumable upload) for OneDrive?). 다운로드에도 해당됩니까?

시간 내 주셔서 감사합니다.

안부,

주세페

답변

1

원 드라이브는 바이트 범위 읽기를 지원합니다. 따라서 Range 헤더를 추가하여 원하는 크기의 청크를 요청할 수 있어야합니다. 예를 들어

,

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

이 파일의 첫 번째 KB를 가져옵니다.

+0

고맙습니다! 아는 한 파일 업로드를 위해 헤더를 지정할 수도 있습니다. –

+0

Range는 위에서 수행 한 작업과 같은 HTTP 검색 요청 만 의미합니다. 이론적으로 Content-Range 헤더는 청크 업로드 메커니즘을 용이하게하는 데 사용될 수 있지만 OneDrive가 다른 의미에서 찾은 것처럼 현재는 이러한 의미를 지원하지 않습니다. – Brad

+0

청크 업로드가 OneDrive와 어떻게 작동하는지 설명하는 문서가 있습니다. https://gist.github.com/rgregg/37ba8929768a62131e85를 읽고 시나리오에 적합한 지 확인하십시오. – Brad

관련 문제