我有Web API服务:
[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的代码:
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);
}
如果我将服务器和客户端上的内容类型更改为“image / png”并将PNG图像从服务器发送到客户端,那么此示例工作正常 - 在Bot框架模拟器中我得到了文本“这是您的文档:”并收到图像。
但是如果我尝试发送内容类型为“application / pdf”或“application / octet-stream”的PDF文档并在内容类型为“application / pdf”的客户端上获取,那么在Bot框架模拟器上我收到了消息那样:
这是否可以在对话“真实”文档而不是下载链接(如何使用图像)?
PS:This question仅适用于“image / png”或类似的内容类型。
答案 0 :(得分:0)
2件事: 1.看起来你没有设置附件的内容类型(上面的代码使用“”) 2.内容不适用于推送媒体文件。我们的消息仅限于256k序列化的json。如果要发送文档或图像,则发送附件,其中url指向文件的文件和内容类型 3.并非所有通道都具有图像以外的文件的语义,并且它们将它们表示为链接。我们使用contenttype来确定我们是否可以为给定的附件做一些特定的通道。