Rails 下载文件

作者: Vincent_Jiang | 来源:发表于2019-07-19 22:29 被阅读0次

    虽然下载文件有 Rails 默认的 send_datasend_file 方法,还有像 axlsx_rails 这样的第三方库。但是我仍然比较倾向于使用 Spreedsheet XML 的方式去开发下载文件的功能。

    配置 config/initializers/mime_types.rb 文件,使 Rails 能够支持导出文件的后缀名。

    Mime::Type.register "application/csv", :csv
    Mime::Type.register "application/xls", :xls
    

    建立 download 方法,并配置好路由。

    # app/controllers/orders_controller.rb
    def download
      @orders = Order.where(created_at: '2019-01-01'.to_time..'2019-02-01'.to_time)
      respond_to do |format|
        format.csv { send_data @orders.to_csv }
        format.xls { headers["Content-Disposition"] = 'attachment; filename=orders.xls' }
      end
    end
    
    # app/models/order.rb
    def self.to_csv(options = {})
      CSV.generate(options) do |csv|
        csv.tap do |csv_element|
          all.each do |order|
            csv_element << order.attributes.values_at(*column_names)
          end
        end
      end
    end
    

    创建 app/views/orders/download.xls.erb 文件,编写表格内容。

    <?xml version="1.0"?>
    <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
              xmlns:o="urn:schemas-microsoft-com:office:office"
              xmlns:x="urn:schemas-microsoft-com:office:excel"
              xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
              xmlns:html="http://www.w3.org/TR/REC-html40">
      <Styles>
        <Style ss:ID="s62">
          <NumberFormat ss:Format="&quot;¥&quot;#,##0.00"/>
        </Style>
      </Styles>
      <Worksheet ss:Name="订单报表">
        <Table>
          <Row>
            <Cell><Data ss:Type="String">订单名称</Data></Cell>
            <Cell><Data ss:Type="String">订单数量</Data></Cell>
            <Cell><Data ss:Type="String">订单金额</Data></Cell>
            <Cell><Data ss:Type="String">购买用户</Data></Cell>
            <Cell><Data ss:Type="String">联系电话</Data></Cell>
            <Cell><Data ss:Type="String">订单创建时间</Data></Cell>
          </Row>
          <% @orders.each do |order| %>
            <Row>
              <Cell><Data ss:Type="String"><%= order.name %></Data></Cell>
              <Cell><Data ss:Type="Number"><%= order.count %></Data></Cell>
              <Cell ss:StyleID="s62"><Data ss:Type="Number"><%= order.amount %></Data></Cell>
              <Cell><Data ss:Type="String"><%= order.user.nickname %></Data></Cell>
              <Cell><Data ss:Type="String"><%= order.user.mobile %></Data></Cell>
              <Cell><Data ss:Type="String"><%= order.created_at.strftime('%Y-%m-%d %H:%M:%S') %></Data></Cell>
            </Row>
          <% end %>
        </Table>
      </Worksheet>
    </Workbook>
    

    现在启动你的 Rails 应用,访问 http://localhost:3000/orders/download.xls 就可以导出订单报表。访问 http://localhost:3000/orders/download.csv 可以导出 CSV 文件。

    参考文档

    相关文章

      网友评论

        本文标题:Rails 下载文件

        本文链接:https://www.haomeiwen.com/subject/qwuelctx.html