获取附加文档列表并使用UWP中的Microsoft Graph API将其下载到本地存储中

时间:2017-06-20 17:56:32

标签: c# uwp microsoft-graph office365api

我正在使用Microsoft Graph API开发UWP应用。我正在使用以下logged in

获取API用户当天的会议列表
https://graph.microsoft.com/v1.0/me/calendarView?startDateTime=2017-06-20T20:00:00.0000000&endDateTime=2017-06-21T10:00:00.0000000 

在创建会议时,我在邀请参与者的邀请中附加了document。 收到的JSON回复有"hasAttachments": true,。我的要求是下载邀请中发送的文件。 我需要使用我的应用程序下载这些文件,然后附加它们并将其发送到participants。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

  

我的要求是下载邀请中发送的文件。

您似乎正在使用List calendarView API来获取活动。在这种情况下,您应该能够从响应中获取所需的Event资源的事件“id”属性,请检查"id": "string (identifier)"

之后,您可以通过List attachments API获取此活动的所有附件,并通过Get attachment获取特殊的附件。您可以通过contentBytes属性获取附加文件的二进制内容,该属性包含文件的base64编码内容。如果您的附件是fileAttachment resource type。例如,如果附件是.txt文件,您可以将其下载并保存在应用程序local folder中,如下所示:

HttpClient client = new HttpClient();
string token =await AuthenticationHelper.GetTokenForUserAsync();
client.DefaultRequestHeaders.Add("Authorization", "Bearer "+token);
HttpResponseMessage httpresponse = await client.GetAsync(new Uri("https://graph.microsoft.com/v1.0/me/events/{id}/attachments/{id}"));
StorageFile downloadedfile = await ApplicationData.Current.LocalFolder.CreateFileAsync("attachment.txt",CreationCollisionOption.ReplaceExisting); 
JObject resObj = JObject.Parse(await httpresponse.Content.ReadAsStringAsync());
string contentbyte = resObj["contentBytes"].ToString();
await FileIO.WriteTextAsync(downloadedfile, Encoding.UTF8.GetString(Convert.FromBase64String(contentbyte)));

更新: 如果附件不是.txt,那么实际需要的是将base64-encode内容正确地传输到文件,例如:

StorageFile downloadedfile = await ApplicationData.Current.LocalFolder.CreateFileAsync("attachment.xlsx", CreationCollisionOption.ReplaceExisting);    
string contentbyte = "contentbyte";
byte[] filecontent = Convert.FromBase64String(contentbyte);
await FileIO.WriteBytesAsync(downloadedfile, filecontent);