c# - 使用可等待附件 FormFlow 从 Bot 框架检索文件?

标签 c# azure botframework bots

我正在为一家公司构建招聘机器人。该机器人的主要任务是从候选人那里获取信息,包括他的简历,并获取通过电子邮件发送的所有信息。

我使用 FormFlow(基本)而不是对话框,这是我获取文件的代码

[AttachmentContentTypeValidator(ContentType = "pdf")]
[Prompt("please, provide us your resume")]
public AwaitableAttachment file_CV;

[Prompt("Your email ?")]
public string email;

public static IForm<ProfileForm> BuildForm()
{
    return new FormBuilder<ProfileForm>()
                   .Message("thank you")
                   .Build();
}

如果我没记错的话,附件文件会转换为本地存储中的 blob,但在生产中,我应该如何检索此文件以通过电子邮件将其发送到电子邮件作业公司?也许使用 azure 存储?

谢谢。

最佳答案

正如您在评论中提到的,用户提供的附加 pdf 文件似乎作为附件存储在 channel 的 blob 存储中。

如果您想将用户提供的 pdf 文件存储在自定义存储(例如 Azure Blob 存储)中,您可以根据 ContentUrl 访问附件,并在验证功能中将其上传到 Azure Blob 存储。

代码片段:

.Field(nameof(file_CV),
validate: async (state, value) =>
{
    var val = (AwaitableAttachment)value;

    var url = val.Attachment.ContentUrl;
    var aname = val.Attachment.Name;

    HttpClient httpClient = new HttpClient();
    Stream filestrem = await httpClient.GetStreamAsync(url);
    httpClient.Dispose();

    var storageAccount = CloudStorageAccount.Parse("{storage_connect_string}");
    var blobClient = storageAccount.CreateCloudBlobClient();

    var cloudBlobContainer = blobClient.GetContainerReference("useruploads");
    await cloudBlobContainer.CreateIfNotExistsAsync();

    CloudBlockBlob blockBlob = cloudBlobContainer.GetBlockBlobReference(aname);

    blockBlob.UploadFromStream(filestrem);

    ((AwaitableAttachment)value).Attachment.ContentUrl = blockBlob.Uri.ToString();


    var result = new ValidateResult { IsValid = true, Value = value };
    return result;
})

测试结果:

enter image description here

关于c# - 使用可等待附件 FormFlow 从 Bot 框架检索文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50922819/

相关文章:

javascript - 如何在不使用 &lt;iframe&gt; 标签的情况下在 iframe 中加载聊天应用程序?

c# - 欢迎消息在网络聊天中不可见,但在模拟器中有效

C# Json.Net 序列化具有虚拟属性的实体

使用 azure cli 的 php exec 命令始终返回 null

powershell - Set-AzureDeployment - ProtocolException

c# - 如何在 LUIS 对话框中调用 LUIS 对话框?

c# - 如何使用linq删除重复记录?

c# - 绑定(bind)来自 mvvm - StringFormat 的属性的文本时标签中的换行符

c# - 如何使 Silverlight TextBox.TextChanged 事件同步触发?

azure - 从 Azure Cosmos DB 删除查询的文档