2016-04-08 21 views
0

私は、Web APIサービスを持っている:私は、「画像/ PNG」に、サーバーとクライアント上のコンテンツタイプを変更し、サーバからクライアントへのPNG画像を送信する場合Microsoft Bot Frameworkを使用してメッセージにファイルを添付するにはどうすればよいですか?

if (message.Text.StartsWith("/d")) 
{ 
    var contentType = "application/pdf"; 
    var attachment = new Attachment(contentType, "https://localhost/api/documents.download"); 
    var response = await client.GetAsync("https://localhost/api/documents.download"); 

    var data = await response.Content.ReadAsByteArrayAsync(); 
    System.IO.File.WriteAllBytes(HostingEnvironment.MapPath("~/tmp/") + document.Name + "." + document.Extension, data); 

    var stream = System.IO.File.ReadAllBytes(HostingEnvironment.MapPath("~/tmp/") + document.Name + "." + document.Extension); 
    attachment.Content = stream; 

    var msg = message.CreateReplyMessage("This is your document: "); 
    msg.Attachments = new[] { attachment }; 

    await context.PostAsync(msg); 
} 

[ActionName("download")] 
[HttpGet] 
public HttpResponseMessage Download() 
{ 
    var stream = new FileStream(HostingEnvironment.MapPath("~/tmp/") + "doc.pdf", FileMode.Open); 
    var result = new HttpResponseMessage(HttpStatusCode.OK) 
    { 
     Content = new StreamContent(stream) 
    }; 
    result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment") 
    { 
     FileName = document.Name + "." + document.AssociatedApplication.Extension 
    }; 

    result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 
    return result; 
} 

ボットのコードをこのサンプルは完璧に動作します - Bot Frameworkエミュレータでは "これはあなたのドキュメントです:"というテキストがあり、イメージを受け取りました。

コンテンツタイプが "application/pdf"または "application/octet-stream"のPDFドキュメントを送信し、コンテンツタイプが "application/pdf"のクライアントで取得しようとすると、ボットフレームワークエミュレータでそのようなメッセージ:これはあなたの文書である

:(https://localhost/api/documents.download

が、これは「本物」のドキュメントの代わりに、ダウンロード用のリンクは(どのようにそれはイメージで動作します)会話の中で取得することはできますか?

PS:This questionは、「画像/ png」などのコンテンツタイプでのみ動作します。

答えて

0

2件: 1.添付ファイルのコンテンツタイプを設定しているようではありません。上記のコードは ""を使用しています。 2.コンテンツはメディアファイルをプッシュするためのものではありません。私たちのメッセージは256kシリアル化jsonに限られています。文書や画像を送信したい場合は、ファイルとファイルのcontenttypeを指すurlで添付ファイルを送信してください。 3.すべてのチャンネルが画像以外のファイルのセマンティクスを持っているわけではありません。 contenttypeを使用して、特定の添付ファイルに対して特定のチャネルを特定できるかどうかを判断します。

関連する問題