我正在使用带有Node Js的Microsoft Bot Framework开发聊天机器人。
我的目的是在向用户询问某些内容时向用户发送csv文件。 我已经实现了以下功能,但是当我下载文件' prova.csv'格式无法识别。
检查输出中的格式是否为以下类型:" data" 任何人都可以帮我解决错误吗?感谢
function (session, results, next) {
if (results.response.entity === 'Si') {
const contentType = 'text/csv';
const response = session.dialogData.far_ric_formato.response.rows;
const csv = response.map(ric => `${ric.num};${ric.pin}`).join('\n');
session.send({
text: 'Ecco il CSV pronto per il download (MOCK)',
attachments: [
{
contentType: contentType,
contentUrl: `data:${contentType};base64,${Buffer.from(csv).toString('base64')}`,
name: 'prova.csv'
}
]
});
答案 0 :(得分:1)
无法在客户端直接呈现.csv文件的Base64字符串,作为一种解决方法,例如代码如下:
var restify = require('restify');
var fs = require('fs');
bot.dialog('download', (session, result)=>{
fs.readFile('./files/test.csv', function(err, data){
var contentType = 'text/csv';
var base64 = Buffer.from(data).toString('base64');
var msg = new builder.Message(session)
.addAttachment({
contentUrl: 'http://localhost:3978/csv/'+base64, //replace with your server url + base64 string.
contentType: contentType,
name: 'MyTest.csv',
});
session.send(msg);
});
}).triggerAction({matches:/^download/i});
server.get('/csv/:base64code', (req, res, next)=>{
let base64code = req.params.base64code;
res.header('Content-disposition', 'inline; filename=test.csv');
res.header('Content-type', 'application/csv');
res.send(Buffer.from(base64code, 'base64'));
});
当用户触发download
对话框时,它会将此文件作为附件发送,当用户单击此文件时,此.csv文件将在用户的客户端下载。