簡體   English   中英

如何在 c# 中使用 Microsoft Graph Api 上傳到 OneDrive

[英]How to upload to OneDrive using Microsoft Graph Api in c#

我一直在嘗試上傳到 OneDrive 帳戶,但我無可救葯地無法上傳小於或大於 4MB 的文件。 我完全沒有訪問驅動器的問題,因為我有創建文件夾、重命名文件/文件夾和刪除文件/文件夾的工作功能。

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

Microsoft Graph API 上的此文檔對 HTTP 代碼非常友好,我相信我能夠將文檔公平地“翻譯”為 C#,但仍然無法獲取文件並上傳到 OneDrive。 網上有些地方好像是用字節arrays? 我完全不熟悉,因為我的主要語言是 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 中上傳一個帶有波浪號“~”的臨時文件(就像我只能打開但不能從文件中導入任何數據一樣)。 如果我交換文件的名稱以使其包含文件位置,則會引發錯誤:

消息:在打開的屬性上找到了 function 'microsoft.graph.createUploadSession'。 不支持打開屬性的函數。

謝謝,任何評論和幫助都意義重大。

使用 memory stream 和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 測試了這個代碼片段。 希望它也對你有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM