microsoftgraph / microsoftgraph/msgraph-sdk-go
How can I upload a file to a personal OneDrive account?
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 335
- Forks
- 43
- Avg merge
- 15h 19m
- Merged PRs (30d)
- 3
Description
Hi, I'm working on a service that will automatically upload files that a user has requested periodically to their OneDrive. While I've managed to get this working for users with a Microsoft 365 account, I haven't been able to successfully upload a file for users with a personal Microsoft account / to their personal OneDrive.
Does the this SDK support uploading files to a personal OneDrive, and if so how would I do that?
A short example of what I have working for a Microsoft 365 account is in this repository - https://github.com/chriswilding/upload-file-to-onedrive.
The same technique does not work for a personal OneDrive. With a Microsoft 365 OneDrive account I was only able to upload a file in a two step process, first PUTing the file, and the POSTing the content. With a personal OneDrive account both setting and not setting the content results in an error.
name := "example.txt"
contentType := "text/csv"
data := []byte("Hello,World!")
newFile := models.NewFile()
newFile.SetMimeType(&contentType)
fileItem := models.NewDriveItem()
fileItem.SetName(&name)
fileItem.SetAdditionalData(map[string]interface{}{
"@microsoft.graph.conflictBehavior": "replace",
})
fileItem.SetFile(newFile)
// When trying to upload to a personal OneDrive account, if the content is set the a error is returned -
// Error creating file item: [child] A stream property 'content' has a value in the payload. In OData, stream property must not have a value, it must only use property annotations.
// error: invalidRequest
// error: [child] A stream property 'content' has a value in the payload. In OData, stream property must not have a value, it must only use property annotations.
//
// However, if the content is not set then a different error is returned -
// Error creating file item: Cannot create a file without content
// error: invalidRequest
// error: Cannot create a file without content
// fileItem.SetContent(data)
createdFileItem, err := client.Drives().ByDriveId("aDriveID").Items().
ByDriveItemId("aParentDriveItem").Children().
Post(context.Background(), fileItem, nil)
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the linked upload-file-to-onedrive example and the Go call using Drives().ByDriveId().Items().ByDriveItemId().Children().Post. Reproduce the two reported errors for personal and Microsoft 365 accounts, then determine whether the SDK supports this upload flow. Done means the supported behavior or required workflow is documented and verified.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go
- Domain
- api, cloud
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100