2017-05-09 4 views
1

Ich versuche, mehrere Dateien von OneDrive über Microsoft Graph zu downloaden.Herunterladen von Dateien mit Microsoft Graph mit bash (curl)

Ich bin sehr nahe, um mein Ziel zu erreichen. Im Moment habe ich das Token-System verwaltet (insbesondere durch Jay Lee detailed answer), und es ist mir gelungen, die Verwirrung zu lösen, die ich zwischen den verschiedenen Endpunkten in Microsoft Graph gemacht habe (danke Marc LaFleur - MSFT).

Jetzt arbeite ich wirklich auf den Aufruf der API, die erlauben würde, die Dateien herunterzuladen, die ich will. Dies ist, wie ich vorgegangen:

1- Wie ich in den Microsoft Graph Documentation gesehen habe, ist die normale Syntax wie folgt lauten würde:

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

2- aber das gibt mir eine 302-Anfrage, die Ich kann nicht mit bash umgehen. Also suchte ich nach einer anderen Lösung, und ich fand diese Microsoft article, dass zu erklären:.

„Zum Herunterladen der Dateien von Microsoft Onedrive in einem JavaScript-App Sie nicht den/content API verwenden können, da dies mit antwortet eine 302 umleiten A 302-Umleitung ist explizit untersagt, wenn ein CORS-Preflight erforderlich ist, beispielsweise bei der Bereitstellung des Autorisierungsheaders

Stattdessen muss Ihre App die @ microsoft.graph.downloadUrl-Eigenschaft auswählen, die dieselbe URL zurückgibt, an die/content weitergeleitet hätte.Diese URL kann dann direkt mit XMLHttpRequest angefordert werden.Da diese URLs vorab authentifiziert sind, können sie ohne eine CORS pr abgerufen werden eflight Anfrage. "

Es spricht über Javascript, aber ich denke, dass es auf meinen Fall angewendet werden kann.

3- So habe ich versucht, diese Methode und ich schrieb:

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

Es gab mir die URL, die normalerweise mich schließlich erlauben würde, um die Datei herunterzuladen, aber wenn ich es ausführen, bekomme ich die folgende Antwort:

Code:

curl "https://graph.microsoft.com/v1.0/$metadata#users('e967dd4d-680e-4a06-9bf7-468875e1a04c')/drive/items/$entity" -H "Authorization: Bearer $access_token" (es ist genau das, was ich mit der vorherige Anfrage bekam)

Antwort:

enter image description here

Jede Hilfe? Warum ist es eine schlechte Anfrage, da ich genau das gestellt habe, was ich von der graph.microsoft.com Anfrage bekommen habe?

Antwort

2

https://graph.microsoft.com/v1.0/$metadata#users('e967dd4d-680e-4a06-9bf7-468875e1a04c')/drive/items/$entity ist die @odata.context Annotation, die nicht das ist, wonach Sie suchen. Sie müssen die URL aus der @microsoft.graph.downloadUrl Annotation ziehen und diese verwenden, um den Dateiinhalt zu erfassen. Die URL, nach der Sie suchen, sollte download.aspx darin enthalten.

+0

Vielen Dank für Ihre Antwort. Nur noch eine Genauigkeit: wenn ich 'curl 'ausführen https://graph.microsoft.com/v1.0/me/drive/items/01MB...WU?select=id,@microsoft.graph.downloadUrl" -H "Authorization: Bearer $ access_token" ', ich habe nur den' @ odata.context', den '@ odata.etag', die ID und' 1 \ "" '(Ich weiß nicht, wofür diese letzte Annotation steht) .Ich habe nicht das '@ content.downloadUrl'. Also, ich habe direkt die URL ohne Auswahlparameter und ich habe es aber warum der Select-Parameter nicht die richtige Eigenschaft abrufen? –

+0

Ein paar Dinge. 1) Ich hätte '@ microsoft.graph.downloadUrl' sagen sollen, da' @ content.downloadUrl' nur relevant ist, wenn die OneDrive API direkt aufgerufen wird. 2) Sie haben einen Fehler gefunden! Wir behandeln '@ microsoft.graph.downloadUrl' nicht richtig in der Select-Anweisung, damit ich das beheben kann. – Brad

+0

Verstanden. Halten Sie uns auf dem Laufenden, wenn behoben. –

Verwandte Themen