0

For some strange reason, I cannot upload files or create folders in a drive using the MS Graph API. I can view/list and even delete without any issues. Same goes for personal OneDrive files...I can list and delete, but not upload or create folders. I can't even create an upload session. I have set up the API permissions correct as far as I can tell (due to the ability to list and delete), but something is amiss. I'm using Ruby and its Net::HTTP class to make the HTTP requests, but I've tried with other languages as well, even the Github Javascript SDK (https://github.com/microsoftgraph/msgraph-sdk-javascript) and Java SDK (https://github.com/microsoftgraph/msgraph-sdk-java). Every attempt I make results in the same 400 (invalid request) error. My request looks like this:

PUT /v1.0/drives/b!0jlSfAMWs0mywYCiVQrxB8cBs6dbx0FDr8CYTNg4ITob3Q2lz0OER6Snzs1G_vHh/items/01L5VYWTF6Y2GOVW7725BZO354PWSELRRZ:/test.txt:/content HTTP/1.1
Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Accept: application/json
User-Agent: Ruby
Host: graph.microsoft.com
Authorization: Bearer <my auth code>
Content-Type: text/plain
Connection: close
Content-Length: 24

My test.txt file content

The error response back has no useful information for diagnosing my problem:

HTTP/1.1 400 Bad Request
Cache-Control: private
Content-Type: application/json
request-id: c42545c0-ee40-40f3-9c7d-19d0e69d8ac8
client-request-id: c42545c0-ee40-40f3-9c7d-19d0e69d8ac8
x-ms-ags-diagnostic: {"ServerInfo":{"DataCenter":"North Central US","Slice":"SliceC","Ring":"3","ScaleUnit":"003","RoleInstance":"AGSFE_IN_45"}}
Strict-Transport-Security: max-age=31536000
Date: Mon, 03 Aug 2020 16:23:47 GMT
Connection: close
Content-Length: 215

{
  "error": {
  "code": "invalidRequest",
  "message": "Invalid request",
  "innerError": {
    "date": "2020-08-03T20:35:44",
    "request-id": "c42545c0-ee40-40f3-9c7d-19d0e69d8ac8"
  }
}

I've tried a few different paths for this PUT request to upload the file and get the same error in response:

sites/#{site_id}/drive/items/01L5VYWTF6Y2GOVW7725BZO354PWSELRRZ:/test.txt:/content
sites/#{site_id}/drive/root:/test.txt:/content
me/drive/items/01FF6DWVN6Y2GOVW7725BZO354PWSELRRZ:/test.txt:/content
me/drive/root:/test.txt:/content

My app registration has the following API permissions and I'm requesting each of these when making the OAuth access token request:

openid
email
profile
https://graph.microsoft.com/User.Read
https://graph.microsoft.com/Files.Read
https://graph.microsoft.com/Files.Read.All
https://graph.microsoft.com/Files.ReadWrite
https://graph.microsoft.com/Files.ReadWrite.All
https://graph.microsoft.com/Sites.Manage.All
https://graph.microsoft.com/Sites.Read.All
https://graph.microsoft.com/Sites.ReadWrite.All

Again - I get similar errors trying to create a folder in any drive or trying to create an upload session. These are both POST requests with a JSON body to a slightly different URL, but the end result is the exact same....a 400 error with absolutely no helpful information. Same thing happens at the 'beta' endpoint.

Microsoft won't help me unless I'm a "Unified Support or Premium customer". Every case I try to submit immediately is closed.

Anyone have any ideas?

Bobby Lawrence
  • 106
  • 1
  • 6

1 Answers1

0

Ok - an update to this. I ended up getting Microsoft O365 support involved and we did a Teams meeting where I screenshared and showed them the problem. They had me try a few things (including creating a brand new Sharepoint site) and the problem persisted. Needless to say, they were stumped themselves.
I then asked some colleagues to try to upload files to a Sharepoint site and it worked for them. Turns out, there was something strange wrong with my Azure app registration. I have no clue what it was because all its config was the exact same as my colleague's. So I ended up creating a brand new app registration and when I use that, everything started working.

Bobby Lawrence
  • 106
  • 1
  • 6
  • Was the permission set same as mentioned on question when it worked the second time? – Jeet Prakash Feb 03 '21 at 18:15
  • I'm also struggling with the same problem. I've got 404 error. can you share your solution for our reference? – MD40 Oct 12 '21 at 11:17
  • Similar problem here (PHP) but the issues is the same. Can upload to /me/root:FILENAME but not to sites.... Can create folders OK but file uploads (To a sharepoint library) still elusive. Similar to here: https://stackoverflow.com/questions/69783140/upload-files-to-documentset-with-ms-graph-rest-api – JI-Web Apr 22 '22 at 01:09
  • ANSWER - Endpoint required a / before the filename.. TIPS: Check permissions and custom endpoint with correct suffix (e.g. createUploadSession, content etc), check slashes and colons are correctly positioned – JI-Web Apr 22 '22 at 01:53