Пример 15.handling-attachments демонстрирует, как прочитать локальный файл и прикрепить его в виде закодированного в base64 изображения:
reply.Attachments = new List<Attachment>() { GetInlineAttachment() };
private static Attachment GetInlineAttachment()
{
var imagePath = Path.Combine(Environment.CurrentDirectory, @"Resources\architecture-resize.png");
var imageData = Convert.ToBase64String(File.ReadAllBytes(imagePath));
return new Attachment
{
Name = @"Resources\architecture-resize.png",
ContentType = "image/png",
ContentUrl = $"data:image/png;base64,{imageData}",
};
}
Другой вариант - использовать ConnectorClient для UploadAttachmentAsync api:
private async Task SendFile(ITurnContext turnContext)
{
var webRoot = _env.ContentRootPath;
var imagePath = System.IO.Path.Combine(webRoot, "Resources", "BotFrameworkDiagram.png");
var connector = turnContext.TurnState.GetValueOrDefault("Microsoft.Bot.Connector.IConnectorClient") as ConnectorClient;
var attachments = new Attachments(connector);
var response = await attachments.Client.Conversations.UploadAttachmentAsync(
turnContext.Activity.Conversation.Id,
new AttachmentData
{
Name = "BotFrameworkDiagram.png",
OriginalBase64 = File.ReadAllBytes(imagePath),
Type = "image/png"
});
var attachmentUri = attachments.GetAttachmentUri(response.Id);
var attachment = new Attachment
{
Name = "BotFrameworkDiagram.png",
ContentType = "image/png",
ContentUrl = attachmentUri
};
var reply = turnContext.Activity.CreateReply();
reply.Attachments.Add(attachment);
await turnContext.SendActivityAsync(reply);
}