目标:动态创建一个包含来自Sql Server查询(不想保存该文件)信息的CSV文件并将其发送给机器人中的用户对Slack的回应。用户点击链接将文件下载到他们的电脑。Bot使用Microsoft Bot Framework(C#)动态创建,可下载的CSV
我在MemoryStream中创建了文件信息,但在机器人响应中无法发送它。这是我的C#伪代码和代码由this启发:
public async Task useSelectedUPC(IDialogContext context, IAwaitable<object> item)
{
var upc = await item;
// use upc to query sql server and obtain information
// use that information to create a MemoryStream result in the format of a csv file
reply.Attachments = new List<Attachment>()
{
new Attachment()
{
ContentType = "text/csv",
Content = $"data:text/csv; base 64, {Convert.ToBase64String(result.ToArray())}",
Name = "sample.csv"
}
};
reply.Text = "Results: ";
await context.PostAsync(reply);
}
我也试过
Content = result,
和
Content = result.ToArray(),
和
Content = "hello",
和
我甚至试着改变ContentType和name为“text/plain”。
但我在Bot Framework通道仿真器中看到的所有内容都是[文件类型'text/csv']而且没有链接。在Slack中,除了附件的文字外,没有任何东西出现。
Microsoft Bot Framework Attachment Class对可接受的内容含糊不清。 什么附件内容是可以接受的,以及如何将MemoryStream结果转换为可接受的格式?
你可以添加你的“结果”对象的详细信息?但我不确定您是否可以传递csv文件 –
尝试在ContentUrl属性中发送$“data:text/csv; base 64,{Convert.ToBase64String(result.ToArray())}”,而不是在Content 。让我知道这是否可行 –
在ContentUrl属性中发送$“data:text/csv; base 64,{Convert.ToBase64String(result.ToArray())}”将返回Bot Framework Channel Emulator中的链接!但是,当我尝试点击该链接时,弹出窗口会显示一个不可点击的确定按钮,显示“您需要一个新的应用程序才能打开此数据”。我的电脑能够定期打开csv文件。在Slack中,没有任何信息出现(没有“结果”,也没有链接)。我相信转换为base64字符串是有效的,因为在放入在线转换器时,它会以可由Google表格打开的有效文本进行响应。 – Janelle