使用图表 API 上传到 MS Teams 的文档已损坏

Document uploaded to MS Teams using graph API gets corrupted

我正在尝试使用 Microsoft Graph(测试版)将文档上传到 Microsoft Teams,但在成功上传后文档已损坏。

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

除了上传的文档损坏并且 Office Online 编辑器无法打开它外,一切正常。但是,我们可以下载文件并在更正文件后在 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 但没有成功。我不明白这里可能出了什么问题。代码非常简单,基于 this documentation。任何帮助将不胜感激。

请试试这个:

        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.
                    }
                }
            }
        }

我可以在 Microsoft Teams 编辑器中查看 Word 文档。