2017-05-09 331 views
1

我嘗試通過Microsoft Graph從OneDrive下載多個文件。使用bash(捲曲)下載Microsoft Graph文件

我非常接近實現我的目標。目前我已經管理令牌系統(特別是通過Jay Lee detailed answer),並且解決了我在Microsoft Graph中存在的不同端點之間造成的混淆(謝謝Marc LaFleur - MSFT)。

現在我真的在調用允許下載我想要的文件的API。這是我如何着手:

1 - 正如我在Microsoft Graph Documentation所看到的,正常的語法是以下幾點:

curl -w %{time_total} https://graph.microsoft.com/v1.0/me/drive/items/01M...WU/content -H "Authorization: Bearer $access_token"

2 - 然而,這給了我一個302請求,這我無法在bash中處理。所以我找了另一種解決方案,我發現這個Microsoft article解釋說:

「從OneDrive在JavaScript應用程序您無法使用/內容API下載文件,因爲這與302重定向響應使用302重定向明確禁止當需要CORS預檢等提供授權頭時。

相反,您的應用需要選擇@ microsoft.graph.downloadUrl屬性,它返回/內容會重定向到相同的URL。然後可以使用XMLHttpRequest直接請求這個URL。因爲這些URL是預先認證的,所以它們可以在沒有CORS的情況下被檢索到eflight請求「。

它談論Javascript,但我認爲它可以適用於我的情況。

3-所以這個方法我試過,我寫道:

curl "https://graph.microsoft.com/v1.0/me/drive/items/01MB...WU?select=id,@microsoft.graph.downloadUrl" -H "Authorization: Bearer $access_token"

它給了我通常會允許我終於下載該文件的URL,但是當我執行它,我得到以下回應:

代碼:

curl "https://graph.microsoft.com/v1.0/$metadata#users('e967dd4d-680e-4a06-9bf7-468875e1a04c')/drive/items/$entity" -H "Authorization: Bearer $access_token"(這正是我與以前的請求得到)

響應:

enter image description here

任何幫助嗎?爲什麼這是一個不好的要求,因爲我已經從graph.microsoft.com請求中得到了完全的結果?

回答

2

https://graph.microsoft.com/v1.0/$metadata#users('e967dd4d-680e-4a06-9bf7-468875e1a04c')/drive/items/$entity@odata.context註釋,這不是你所追求的。您需要從@microsoft.graph.downloadUrl註釋中提取URL並使用它來獲取文件內容。你之後的URL應該在其中提及download.aspx

+0

謝謝你的回答。再精確一點:當我執行'curl「時https://graph.microsoft.com/v1.0/me/drive/items/01MB...WU?select=id,@microsoft.graph.downloadUrl」-H 「Authorization:Bearer $ access_token」',我只有'@ odata.context','@ odata.etag',id和'1 \「」'(我不知道這最後一個註釋是什麼意思) 。我沒有'@ content.downloadUrl'。所以,我直接把網址沒有選擇參數,我明白了,但爲什麼選擇參數不檢索正確的屬性? –

+0

一些事情。 1)我應該說'@ microsoft.graph.downloadUrl'因爲「@ content.downloadUrl」僅在直接調用OneDrive API時相關。 2)你發現了一個錯誤!我們不在select語句中正確處理'@ microsoft.graph.downloadUrl',所以我會解決這個問題。 – Brad

+0

明白了。讓我們保持最新的固定時間。 –