代码之家  ›  专栏  ›  技术社区  ›  Dheeraj Kesri

使用graph API上载到MS团队的文档已损坏

  •  1
  • Dheeraj Kesri  · 技术社区  · 6 年前

    我正在尝试使用Microsoft Graph(测试版)将文档上载到Microsoft团队,但成功上载后文档会损坏。

    使用Graph,我首先创建一个组,基于该组创建一个团队,添加一些团队成员,最后将文档上传到默认通道。

    除了上传的文档被破坏,Office Online editor无法打开之外,其他一切正常。但是,我们可以下载该文件并在更正该文件后在Microsoft Word中打开。

    下面是我用于文档上传的代码->

    FileInfo fileInfo = 
        new FileInfo(@"F:\Projects\TestProjects\MSTeamsSample\MSTeamsSample\Files\Test File.docx");
    
    var bytes = System.IO.File.ReadAllBytes(fileInfo.FullName);
    var endpoint = $"https://graph.microsoft.com/beta/groups/{groupId}/drive/items/root:/General/{fileInfo.Name}:/content";
    
    var fileContent = new ByteArrayContent(bytes);
    fileContent.Headers.ContentType = 
        MediaTypeHeaderValue.Parse("application/octet-stream");
    
    var requestContent = new MultipartFormDataContent();
    requestContent.Add(fileContent, "File", fileInfo.Name);
    
    var request = new HttpRequestMessage(HttpMethod.Put, endpoint);
    request.Headers.Authorization = 
        new AuthenticationHeaderValue("Bearer", "<Access Token>");
    request.Content = requestContent;
    var client = new HttpClient();
    var response = client.SendAsync(request).Result;
    

    我尝试将内容类型更改为 application/vnd.openxmlformats-officedocument.wordprocessingml.document 但运气不好。我不明白这里怎么了。基于此,代码非常简单 documentation .任何帮助都将不胜感激。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Wajeed Shaikh    6 年前

    请试试这个:

            var filePath = @"F:\Projects\TestProjects\MSTeamsSample\MSTeamsSample\Files\Test File.docx";
            var fileName = Path.GetFileName(filePath);
            var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
            var endpoint = $"https://graph.microsoft.com/beta/groups/{groupId}/drive/items/root:/General/{fileName}:/content";
    
            using (var client = new HttpClient())
            {
                using (var content = new StreamContent(fileStream))
                {
                    content.Headers.Add("Content-Type", MimeMapping.GetMimeMapping(fileName));
    
                    // Construct the PUT message towards the webservice
                    using (var request = new HttpRequestMessage(HttpMethod.Put, endpoint))
                    {
                        request.Content = content;
    
                        request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", tokenResponse.Token);
    
                        // Request the response from the webservice
                        using (var response = await client.SendAsync(request))
                        {
                            // Check the response.
                        }
                    }
                }
            }
    

    我可以在微软团队编辑器中看到Word文档。