1
votes

My app is using client_credentials, and is successfully consuming the Graph API on most calls.

However, I have been attempting to get images from a sharepoint folder by path and filename:

https://graph.microsoft.com/v1.0/drive/root:/sites/folder1/folder2/folder3/folder4/photo.jpg

The appropriate headers are being set (authorization and accept).

httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + session["access_token"]);
httpClient.DefaultRequestHeaders.Add("accept", "application/json; odata.metadata=minimal");

The request returns a 404 - Not found response.

When I navigate to our sharepoint site, I can see the image fine so I can only assume the file path is correct:

https://ourcompany.sharepoint.com/sites/folder1/folder2/folder3/folder4/photo.jpg

Apologies, but I am new to Graph API and couldn't find anything referencing this in the documentation:

https://docs.microsoft.com/en-us/graph/api/resources/onedrive?view=graph-rest-1.0

Path
/me/drive/root:/path/to/file

Resource Access a DriveItem by path relative to the user's OneDrive root folder.

Are there special permissions needed for this? I found something suggesting permissions might be required in azure portal but this is to do with azure active directory and I'm not sure if it will affect the graph API, as it was working OK, reading drives and drive items in sharepoint (by drive id and drive item id, not by file path).

EDIT: Went into azure portal, added Graph API permissions to application:

  • Site: ReadAll
  • Directory: ReadAll
  • File: ReadAll

No change so far.

1

1 Answers

2
votes

A site contains the drive so you're referencing things in the wrong order. To get a DriveItem from a site's drive, you want this:

/sites/{siteId}/drive/root:/folder1/folder2/folder3/folder4/photo.jpg

If you're looking to download the DriveItem instead of just retrieving the metadata, you'll want this:

/sites/{siteId}/drive/root:/folder1/folder2/folder3/folder4/photo.jpg:/content