【问题标题】:Hapi JS send fileHapi JS 发送文件
【发布时间】:2013-10-17 13:36:01
【问题描述】:

我有下一个任务:

我的server 中的一个请求想要获取一个带有统计信息的 csv 文件。我有 JSON 结构。使用模块 https://github.com/wdavidw/node-csv,我从我的 json 创建了一个 csv 结构。问题是:如何将其发送给具有正确 mime 类型(文本/csv)的用户?

var arr = [["date,shop_id,product_id,count"]];
_.each(res, function(date) {
  _.each(date.unknown_products, function(count, product) {
    arr.push([date.date + ',' + id + ',' + product + ',' + count ]);
  });
});

csv()
  .from.array(arr)
  .to(function (data) {
    console.info(data); // => correct csv 
                                //  "date,shop_id,product_id,count"     
                                //  "2013-10-01,1,123,312"
    response += data;
  })
  .on('end', function (count) {
    console.log('Number of lines: ' + count); // => Number of lines: 33878

    //request.reply(new Hapi.response.Obj(response, 'text/csv'));
    request.reply(response);
  });

【问题讨论】:

    标签: javascript node.js csv mime-types hapijs


    【解决方案1】:

    好的,我找到了使用Hapi.response.Stream的解决方案:

    var stream = csv().from.array(arr, {
       columns: ["date", "shop_id", "product_id", "count"]
    });
    
    
    var response = new Hapi.response.Stream(stream);
    
    response.type('text/csv');
    request.reply(response);
    

    也许你可以告诉我实现它的最佳方法。

    【讨论】:

    • 或者,您可以使用:reply(data).type('text/csv')
    • 如何定义发送给客户端的文件名? reply(data).type('text/csv') 工作正常,但发送一个没有扩展名的“csv”文件,我想自己生成名称。
    【解决方案2】:

    可能会帮助希望使用 Hapi V18 以 CSV 文件流响应的人。

    const stringify = require('csv-stringify')
    
    const stream = stringify(arrayOfObjects, { header: true })
    return h.response(stream)
      .type('text/csv')
      .header('Connection', 'keep-alive')
      .header('Cache-Control', 'no-cache')
      .header('Content-Disposition', 'attachment;filename=myfilename.csv')
    

    【讨论】:

      【解决方案3】:

      我相信在提出这个问题时,返回文件的 API 可能不可用。但是,您可以使用以下方法提供静态文件:

      1- reply 接口上的file 方法。

      reply.file('./path/to/file');
      

      2- 直接指定文件处理程序:

      server.route({
          method: 'GET',
          path: '/picture.jpg',
          handler: {
              file: 'picture.jpg'
          }
      });
      

      请查看此 Hapi tutorial 以获得详细说明。

      【讨论】:

        【解决方案4】:

        你可以使用目录 :) hapi 9.x 之后不再与 hapi 集成,但你可以 require 和使用它。

        查看http://hapijs.com/tutorials/serving-files#directory-handler了解更多信息

        【讨论】:

          【解决方案5】:

          使用这个

          file="path/to/your/csvFile.csv"
          return h.file(file,{mode:'attachment',type:'text/csv'})
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-05-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-15
            相关资源
            最近更新 更多