使用图表 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 文档。
我正在尝试使用 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 文档。