How can I attach file to message with Microsoft Bot Framework?

丶灬走出姿态 提交于 2019-12-13 05:25:38

问题


I have Web API service:

[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's code:

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);
}

If I change content type on the server and client to "image/png" and send PNG image from server to client then this sample works perfect - in the Bot Framework Emulator I got text "This is your document: " and received image.

But if I try to send PDF document with content type "application/pdf" or "application/octet-stream" and get it on the client with content type "application/pdf" then on the Bot Framework Emulator I got message like that:

This is your document: (https://localhost/api/documents.download)

Is this possible to get in the conversation "real" document instead of link for download (how it works with images)?

PS: This question works only for "image/png" or similar content types.


回答1:


2 things: 1. it doesn't look like you are setting the content type for the attachment (the code above is using "") 2. Content is not for pushing media files. Our messages are limited to 256k serialized json. If you want to send a document or image you send an attachment with url pointing to the file and contenttype for the file 3. Not all channels have semantics for files other than images and they represent them as links. We use the contenttype to determine if we can do something channel specific for a given attachment.



来源:https://stackoverflow.com/questions/36492045/how-can-i-attach-file-to-message-with-microsoft-bot-framework

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!