2017-06-20 4 views
-2

Microsoft Graph APIを使用してUWPアプリケーションを開発しています。私は会議の作成時 付属のドキュメントのリストを取得し、UWPのMicrosoft Graph APIを使用してローカルストレージにダウンロードします

API以下
https://graph.microsoft.com/v1.0/me/calendarView?startDateTime=2017-06-20T20:00:00.0000000&endDateTime=2017-06-21T10:00:00.0000000 

を使用してlogged inユーザーの現在の日のミーティングの一覧を取得しています、私は招待された参加者のための招待でdocumentを添付していました。 JSONの応答は"hasAttachments": true,です。私の要件は、招待状で送信されたファイルをダウンロードすることです。 私のアプリを使ってそれらのファイルをダウンロードしてから、添付してparticipantsに送る必要があります。どうやってやるの?

+2

何を試してみましたか?また、動作が期待どおりにどうなりましたか?あなたの問題を解決するために作った努力(とコード)を表示することは、答えを引きつけるのに役立ちます。 –

答えて

0

私の要件は、招待状で送信されたファイルをダウンロードすることです。

イベントを取得するのに、List calendarView APIを使用しているようです。その場合は、応答から希望するEventリソースのイベント "id"プロパティを取得できるはずです。"id": "string (identifier)"にチェックを入れてください。

その後、このイベントのすべての添付ファイルをList attachments APIで取得し、特別な添付ファイルをGet attachmentで取得できます。ファイルのbase64でコード化された内容を含むcontentBytesプロパティによって、添付ファイルのバイナリ内容を取得できます。添付ファイルが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で転送されますたとえば、内容をファイルにエンコードします。

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

このコードはテキストドキュメントに適していますが、.docx、.xls、.pdf、.pptxなどの他のドキュメントはどうですか? – Apoorv

+0

@Apoorvこれらのファイル形式は動作するはずです。彼らがうまく働いた '.docx'と' .xls'をテストしました。私の更新を参照してください。 –

+0

もう1つ、私はユーザーが(システム時間)にログインし、現在の日の終わりまでそこにある会議をチェックしたいと思います。時間をタイムゾーンに変換し、それに応じて時間を表示したい。どうしたらいいですか? – Apoorv

関連する問題