2017-05-19 6 views
1

공유 링크를 통해 공유 디렉터리를 통해 액세스되는 OneDrive 파일을 다운로드하고 이동할 수있는 방법을 찾으려면 도움이 필요합니다.공유 링크 디렉터리에서 OneDrive 파일 다운로드 및 이동

나는 두 명의 사용자가 있습니다

  • 사용자 'A'는 마이크로 소프트의 소비자입니다 및 정기적 원 드라이브 계정을 가지고 있으며,
  • 'toshare'csv 파일 폴더에있는 'test.csv'를 개최한다 또한 test.csv을 다운로드 한 다음 하위 디렉토리/toshare/아카이브를 제외하고

에 파일을 이동 그래프 API를 사용해야합니다 정기적 마이크로 소프트 소비자 인 사용자 B는 '저는 현재 크롬을 사용하고 있습니다 앱 "고급 REST 클라이언트"를 사용하여 수동으로 REST cal 만들기 Microsoft의 온라인 "Graph Explorer"도구에서 네트워크 트래픽을 검사하여 Authenticated OAuth BEARER 토큰을 얻습니다. 호출을 이해하고 나면 Java App에 호출을 통합합니다.

나는 성공적으로 여기 지침을 따랐다 : https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/shares_get 폴더의 내용을 볼 수 있습니다.

사용자 'A'는 OneDrive에 들어가서 'toshare'폴더를 마우스 오른쪽 버튼으로 클릭하고 shareLink를 선택했습니다. 나는 토큰 공유에 shareLink를 변환 한 후 사용자 'B'와 같은 그래프 API와 다음 API 호출을 사용했다 :

GET https://graph.microsoft.com/v1.0/shares/<share-token>/root?$expand=children 

이 나에게 디렉토리의 모든 파일을 보여줍니다, 'test.csv을'포함

이제이 정보를 사용하여 어떻게 test.csv를 다운로드 할 수 있습니까? 사용자 'B'는 파일 이름을 알지 못하지만 .csv 파일로 식별 할 수 있습니다 (코드에서이 작업을 수행 할 수 있음). 공유를 통해 파일을 다운로드하는 방법에 대한 많은 문서가없는 것처럼 보입니다.

내가 들어 왔 가장 가까운이 나에게 파일 메타를 표시합니다 내 파일 오브젝트 아이들의 "WEBURL"속성을 다음 토큰 주에 그 전원을 켜고

GET https://graph.microsoft.com/v1.0/shares/<child-share-token>/root 

전화를했다 -데이터. 그리고 나는 다운로드 대략 API 문서에 따라 다운로드하려고 https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/item_downloadcontent

GET https://graph.microsoft.com/v1.0/shares/<child-share-token>/root/content 

이 나는 ​​사용자가 'A'로 전화를 걸 경우 작동하지만 사용자 'B'에 대한 작동하지 않기 때문에이 흥미 롭다 대신 고급 REST 클라이언트에서 403을 얻습니다. (나는 그래프 탐색기에서 실행하면, 나는 "URI가 잘못 인코딩 점유율이 사이트를."얻는 대신에, 나는 다른 실험으로 발견 한 이는 정말 권한 문제가 있다는 뜻.) 또한

GET https://graph.microsoft.com/v1.0/shares/<share-token>/root:/test.csv:/content 

작동하지 않으면 반환 : "400 잘못된 요청"메시지와 함께 : "세그먼트 '루트에 리소스를 찾을 수 없습니다 :'." 경로 스타일 파일 탐색이 공유 디렉토리에서 작동하지 않는 것 같습니다.

이 시점에서 나는 오히려 붙어 있습니다. 파일을 다운로드 한 후 하위 디렉토리로 이동하여 이미 읽었 음을 나타냅니다. OneDrive for Business에서도이 기능을 사용하고 싶습니다. 다른 날을 떠날거야.

어떤 통찰력이 큰 감사 것, 제레미

+0

이후, 나는 프로그램 방식으로 주식 접근법을 다뤄려고 애를 썼습니다. 우리는 이제 위임 된 권한을 사용하여 사용자 디렉토리에 명시 적으로 액세스합니다. 그 문서는 매우 명확하고 잘 작동합니다. – fei0x

답변

0

이되는 시점에서 어린이 액세스 주위 이전의 모든 문서가 적용, drives/{id}과 유사하기 shares/{id} 세그먼트를 고려하는 것이 가장 좋습니다. 시나리오 감안할 때 나는 경로 구문을 사용하십시오 :

https://graph.microsoft.com/v1.0/shares/<share-token>/root/children/test.csv 

이 분명 파일 이름을 알고 필요로한다, 그러나 당신은 이미 그 작업을 수행하는 알고리즘을 가지고있는 것처럼 들린다.

child-share-token을 만드는 방법은 이론적으로는 가능하지만 사용자 B가 명시 적 권한을 가질뿐만 아니라 인증도 제공해야합니다. share-token이 (가) 공유 링크 였기 때문에 사용자 B는 URL이 있음으로 인해 권한을 얻는 것이 가장 가능성이 높습니다.이 경우 새 URL을 생성하면이 URL이 작동하는 특수 토큰이 제거되는 것일 수 있습니다. 그렇기 때문에 가능한 경우 항상 원래의 share-token을 사용하는 것이 가장 좋습니다.

비슷한 규칙이 파일 이동에 적용됩니다. 먼저, 공유 링크가 "편집"기능을 제공한다고 가정합니다. 그렇지 않으면이 중 아무 것도 작동하지 않습니다. 두 번째로 archive 폴더가 이미 있다고 가정합니다 (here과 같은 모양의 https://graph.microsoft.com/v1.0/shares/<share-token>/root/children에 대한 POST를 사용하여 생성해야하는 경우).

패치 할 파일을 https://graph.microsoft.com/v1.0/shares/<share-token>/root/children/test.csv으로 이동하려면 parentReferencehere으로 새로 지정하십시오. id 값을 사용하는 것이 가장 바람직하지만 path을 부모에게 /shares/<share-token>/root/children/archive 형태로 제공 할 수 있어야합니다.

+0

https://graph.microsoft.com/v1.0/shares/ /root/children이 제대로 작동하고 test.csv의 메타 데이터 인 "name": "test.csv"를 보여줍니다. 귀하의 예제는 나에게 "400 Bad Request"를줍니다 : "세그먼트 'root :'에 대한 리소스를 찾을 수 없습니다." – fei0x

+0

@ microsoft.graph.downloadUrl 링크를 사용할 수 있습니까?/root/children 결과에서 볼 수 있습니다. 문서는 소스 데이터 파일에 대한 사전 인증 된 링크처럼 들리게 만들었습니다. 하지만 어떻게 사용하는지 잘 모르겠습니다. https://dev.onedrive.com/items/download.htm 그런데 도움을 주셔서 감사합니다. = D – fei0x

+0

안녕하세요 @ fei0x, 나는 그것이 공유를 위해 아직 작동하지 않는 것처럼 콜론 구문에 대한 참조를 제거하는 대답을 업데이트했습니다. 고맙게도'children' 컬렉션을 통해 아이들을 참조 할 수 있어야합니다. re : downloadUrl - (Authorization 헤더가없는) 웹 요청을하면 파일 내용을 반환합니다. – Brad