如何在ASP.NET MVC中使用Driveitem对象Microsoft图形API以文本/文档格式上传现有文件

时间:2019-06-22 04:38:02

标签: c# asp.net-mvc asp.net-web-api microsoft-graph

我正在创建一个Web应用程序,我想将现有文件从驱动器上载到按语法创建的onedrive文件夹中。我遵循了link中的上载示例,但是尽管我能够使用driveitem对象创建文件夹,但是我无法创建文件并上载其中的现有文件内容。

        DriveItem file = new DriveItem()
        {
            File = new Microsoft.Graph.File(),
            Name = "abc.txt",                              
        };
        var freq = graphClient
                .Me
                .Drive
                .Items[parentFolder.Id]                    
                .Request();
              byte[] data = 
        System.IO.File.ReadAllBytes(@"C:\Users\Desktop\testfile.txt");
        DriveItem uploadedFile = null; MemoryStream stream = null;
        using (stream = new MemoryStream(data))
        {
            file.Content = stream;
            stream.Position = 0;                
        }
        var req = graphClient
               .Me                 
              .Drive.Items[parentFolder.Id]            
               .Content
               .Request();
        try
        {
            uploadedFile = await req.PutAsync<DriveItem>(stream);
        }
        catch (Exception ex)
        {

        }

但是此代码不会创建文件,也不会更新我使用driveitem对象创建的文件中的内容。

1 个答案:

答案 0 :(得分:0)

以下端点演示了如何替换现有文件:

PUT /me/drive/items/{item-id}:/{path-to-file}/content  

其中item-id指的是具有文件夹构面的DriveItem

C#示例

var path = @"C:\Sample.docx";

var bytes = System.IO.File.ReadAllBytes(path);
var stream = new MemoryStream(bytes);

var driveItem = await graphClient.Me
      .Drive
      .Items[folderItemId]
      .ItemWithPath(System.IO.Path.GetFileName(path))
      .Content
      .Request()
      .PutAsync<DriveItem>(stream);