Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
649 views
in Technique[技术] by (71.8m points)

Upload file to SharePoint drive using Microsoft Graph

We are trying to implement integration between a web application and SharePoint Online using Microsoft Graph rest API.

Specifically, we need to upload a file to a specific SharePoint site's document library (drive), different than current user default drive. We get the access token through Azure AD with access to all files.

We can upload files into any drive using /v1.0/me/drive/... but not when we use another drive.

For example:

var response = client.PutAsync(graphResourceUrl +
    "/beta/sharepoint/sites/" + siteCollSiteId +
    "/lists/" + listId +
    "/drive/root/children/" + fileName + ":/content",
    new ByteArrayContent(fileBytes)).Result;

var response = client.PutAsync(graphResourceUrl +
    "/beta/drives/" + "/" + listId +
    "/items/" + siteCollSiteId + "/" + fileName + ":/content",
    new ByteArrayContent(fileBytes)).Result;

var response = client.PutAsync(graphResourceUrl +
    "/beta/drives/" + listId + "/" + fileName + ":/content",
    new ByteArrayContent(fileBytes)).Result;

Both /v1.0 and /beta (in the case of SharePoint containing path) we are getting an error response of Not Implemented.

What could we be doing wrong? Is it not yet working with Microsoft Graph (other than /me)?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

In order to get all the files of a drive using v1.0, you would first need to get an access token (which I see you are already passed that), then get the 'drive-id' and use the following URL(note: its not 'drive' it is 'drives'):

https://graph.microsoft.com/v1.0/drives/{drive-id}/root/children

To get the drive id, I made the following GET request using postman, this will list all the drives on the site and you will be able to get the ID of that drive:

https://graph.microsoft.com/v1.0/sites/{tenant}.sharepoint.com:{path-to-site(ie: /sites/HR)}:/drives

To answer your question regarding Uploading files, you will make a PUT request to the following URL:

https://graph.microsoft.com/v1.0/drives/{drive-id}/root:/{folder-name}/{file-name.txt}:/content

You will need to set two required headers:

  • Authorization
  • Content-Type

Next, you will pass the binary stream of the file into the body of the request.

Other helpful items

Get all files inside of a folder:

https://graph.microsoft.com/v1.0/drives/{drive-id}/root:/{folder-name}:/children

Get content of users OneDrive:

https://graph.microsoft.com/v1.0/me/drive/root/children

REFERENCE: https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/driveitem_put_content#example-upload-a-new-file


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...