如何使用Microsoft Graph Api在C#中上传到OneDrive

4
我一直在尝试上传到OneDrive帐户,但是无法上传小于或大于4MB的文件。我没有任何访问驱动器的问题,因为我有可以创建文件夹、重命名文件/文件夹和删除文件/文件夹的工作函数。请注意保留HTML标签。

https://learn.microsoft.com/en-us/graph/api/driveitem-put-content?view=graph-rest-1.0&tabs=csharp

这份关于Microsoft Graph API的文档非常友好地使用了HTTP代码,我相信我能够将其“翻译”成C#,但仍无法获取文件并上传到OneDrive。一些在线资源似乎在使用字节数组?这对我来说完全陌生,因为我的主要语言是C++,我们只使用ifstream/ofstream。无论如何,以下是具体的代码部分(希望这足够了):
var item = await _client.Users[userID].Drive.Items[FolderID]//"01YZM7SMVOQ7YVNBXPZFFKNQAU5OB3XA3K"].Content
                    .ItemWithPath("LessThan4MB.txt")//"D:\\LessThan4MB.txt")
                    .CreateUploadSession()
                    .Request()
                    .PostAsync();
            Console.WriteLine("done printing");

目前,它上传了一个在OneDrive中带有波浪符“~”的临时文件(好像我只能打开但无法将任何数据从文件导入到其中)。如果我交换文件名,使其包括文件位置,则会引发错误:
消息:在开放属性上找到函数“microsoft.graph.createUploadSession”。不支持开放属性上的函数。

如何为 OneDrive 进行身份验证?是应用程序还是用户委托? - Kiquenet
1个回答

5
尝试使用内存流和PutAsync<DriveItem>请求的方法如下:
string path = "D:\\LessThan4MB.txt";
byte[] data = System.IO.File.ReadAllBytes(path);

using (Stream stream = new MemoryStream(data))
{
    var item = await _client.Me.Drive.Items[FolderID]
            .ItemWithPath("LessThan4MB.txt")
            .Content
            .Request()
            .PutAsync<DriveItem>(stream);
}

我假设你已经授予了Microsoft Graph Files.ReadWrite.All权限。请检查你的API权限。我使用相当老的Microsoft.Graph库版本1.21.0测试了这段代码片段。希望它也适用于你。


非常感谢,这正是我所需要的,我只是不理解字节数组之类的东西,但现在我看到它是如何工作的了。我将目前正在研究如何上传大于4MB的文件! - MICHELRODRIGUEZ1
为什么不只使用大于4MB的方法?它比单个请求选项慢那么多吗? - Irish Redneck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接