2017-05-19 31 views
1

共有の共有リンク方法を使用して、共有ディレクトリを介してアクセスするOneDriveファイルをダウンロードして移動する方法を見つけるための支援が必要です。共有リンクディレクトリからOneDriveファイルをダウンロードして移動する

私は2人のユーザーがあります。

  • ユーザー「」マイクロソフトの消費者で、定期的にOneDriveアカウントを持っており、フォルダ内のCSVファイル「のtest.CSV」を開催します
  • 「toshare」をそして、ユーザのtest.CSVをダウンロードするには、グラフAPIを使用して、サブディレクトリ/ toshare /アーカイブにファイルを移動する必要も定期的にマイクロソフトの消費者は「B」
別に

:私は現在、クロムを使用していますアプリ "高度なRESTクライアント"を手動でREST calにするMicrosoftのオンライン「Graph Explorer」ツールからネットワークトラフィックを検査することで、Authenticated OAuth BEARERトークンを取得しています。呼び出しを理解したら、Javaアプリケーションにその呼び出しを統合します。

は、私が正常にここでの指示に従っている: 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を取得します。 (私はグラフExplorerでそれを実行した場合、私は「URIが無効であるエンコードされたシェアのサイトを。」を得る代わりに、私は他の実験で発見したこれは、実際に認証の問題がありますを意味します。)また

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

それが返されます: "400 Bad Request"メッセージ: "セグメント 'root:'のリソースが見つかりません。パススタイルのファイルナビゲーションが共有ディレクトリでは機能しないようですか?

この時点で私はむしろ固執しています。ファイルをダウンロードした後、既に読み込まれていることを示すサブディレクトリに移動したいと思います。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を持っているという事実によって許可を得ている可能性が高くなります。この場合、新しいものを生成すると、おそらくこれが動作する特別なトークンが削除されている可能性があります。そのため、可能であればいつも元のを使用することが最善です。

同様の規則がファイルの移動に適用されます。まず、共有リンクが「編集」機能を提供していると仮定します。次に、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.csvparentReferenceと書いてください。hereとしてください。 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'ヘッダなしでWebリクエストを作成するだけで、ファイルの内容を返します。 – Brad

関連する問題