【问题标题】:How can I get the path of an excel file with nodeJS in a chatbot using Bot framework?如何在使用 Bot 框架的聊天机器人中获取带有 nodeJS 的 excel 文件的路径?
【发布时间】:2019-11-12 07:37:22
【问题描述】:

我用机器人框架做了一个聊天机器人,使用这个框架可以添加附件。 因此,在将 Excel 文件添加到我的聊天机器人后,我已经编写了一个代码以将我的 excel 文件保存在 base64 中。

但是我想从我的电脑中的任何地方获取一个 Excel 文件并在 base64 中转换它,我需要有完整的路径,而在 NodeJS 中我不知道该怎么做。

 async attachmentsStep(stepContext, next) {
        var fs = require('fs');
        var activity = stepContext.context.activity;

        if (activity.attachments && activity.attachments.length > 0) {
            var attachment = activity.attachments[0];
            // function to encode file data to base64 encoded string
            function base64_encode(file) {
                // read binary data
                var bitmap = fs.readFileSync(file);
                // convert binary data to base64 encoded string
                return new Buffer.from(bitmap).toString('base64');
            }

            this.base64str = base64_encode( **PATH OF EXCEL FILE** + attachment.name);

            var nex = await stepContext.next();
            var base64 = this.base64str;

            return {
                base64,
                nex
            };
        } 
    }

请问你有什么想法吗?

【问题讨论】:

    标签: node.js excel path botframework


    【解决方案1】:

    您可以使用__filename__dirname 来获取文件的绝对路径。

    console.log(__filename);
    // Prints: /Users/mjr/example.js
    

    【讨论】:

    • 感谢您的回答速度,但例如我从我的桌面 (C:\Users\Myname\Desktop\Book1.xlsx) 和 _filename 获取一个 Excel 文件和 * _dirname*,我有这个:console.log(__filename); = c:\Users\Myname\Desktop\bot framework v4\bot fonctionnel V4\13.core-bot\dialogs\mainDialog .js console.log(__dirname); = c:\Users\Myname\Desktop\bot framework v4\bot fonctionnel V4\13.core-bot\dialogs
    • 我没试过file.path,应该怎么用? @Ayush
    【解决方案2】:

    ContentUrl 恢复文件,因此不需要路径,我使用 url 直接将其转换为 base64,如下所示:

    async attachmentsStep(stepContext, next) {
            var activity = stepContext.context.activity;
    
            if (activity.attachments && activity.attachments.length > 0) {
                var attachment = activity.attachments[0];
    
                var base64Url = attachment.contentUrl;
                console.log(process.env.PATH);
    
                /** Convert Url in base64 **/
                var axios = require('axios');
                var excel = await axios.get(base64Url, {responseType: 'arraybuffer'});
                var base64str = Buffer.from(excel.data).toString('base64');
                /**************************/
    
                // base64str = 'data:' + base64Type + ';base64,' + base64str; 
    
                var nex = await stepContext.next();              
    
                return {
                    base64str,
                    nex
                };
            }
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-14
      • 2019-08-19
      • 2011-04-23
      相关资源
      最近更新 更多