Bot框架:在Node Js中创建csv文件时出错

时间:2018-02-16 09:26:21

标签: javascript node.js function csv botframework

我正在使用带有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'
                }
            ]
        });

1 个答案:

答案 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文件将在用户的客户端下载。