【问题标题】:send_data for csv file returns text of file, not filecsv 文件的 send_data 返回文件的文本,而不是文件
【发布时间】:2012-06-18 14:32:16
【问题描述】:

美好的一天!我想下载自动生成的文件 qwerty.csv,但它只返回文本“12345”(没有文件)。你能帮帮我吗?

用户界面

<script type="text/javascript">
function getCsv() {
    var ids = getSelectedRecordIds();
    $.post('/payments/form_csv.csv', { ids: ids }, function(data) {});
}
</script>

控制器

def form_csv
    csv_string = CSV.generate do |csv|
        csv << ["12345"]
    end

    respond_to do |format|
        format.csv {
            send_data csv_string, :type => 'text/csv; charset=utf-8; header=present', :disposition => "attachment; filename=qwerty.csv", :filename => "qwerty.csv"
        }
    end
end

在控制台中

Started POST "/payments/form_csv.csv" for 127.0.0.1 at 2012-06-18 18:18:11 +0400 
Processing by PaymentsController#form_csv as CSV
  Parameters: {"ids"=>["18\n\t  "]}
  Rendered text template (0.0ms)
Sent data qwerty.csv (0.4ms)
Completed 200 OK in 2ms (Views: 0.4ms | ActiveRecord: 0.0ms)

但是没有文件提示...

【问题讨论】:

  • 也许这只是您如何注册应用程序/MIME 类型的问题。当您在文件浏览器中单击 *.csv 文件时会发生什么? LibreOffice(或 Excel)会自动打开吗?未知/未注册的 txt MIME 类型可能始终显示在您的浏览器中。
  • >> 在文件浏览器中单击 *.csv 文件时会发生什么? LibreOffice(或 Excel)会自动打开吗?不幸的是,是的,Excel 自动打开它=(非常相似的主题(没有决定)-stackoverflow.com/questions/7597414/…
  • @AnDragFag 我猜是智能浏览器在浏览器上显示 CSV 数据的情况。设置这个并希望这有助于config.action_dispatch.x_sendfile_header="X-Sendfile"

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1


【解决方案1】:

哦,它可以在没有 ajax 的情况下作为表单提交!

这个话题也有同样的问题: http://www.ruby-forum.com/topic/111107

使表单成为非 AJAX 表单 我试了一下……效果很好!

控制器

def form_csv
    csv = get_csv
    send_csv(csv)
end

def get_csv
    result = CSV.generate do |csv|
        csv << ["12345"]
    end
    return result
end

def send_csv(csv)
    send_data csv, :type => 'text/csv; charset=utf-8; header=present', :disposition => 'attachment; filename=payments.csv'
end

用户界面

function getCsv() {
    var ids = getSelectedRecordIds();
    params = {ids: ids}
    post_to_url("/payments/form_csv", params);
}

其中 post_to_url - 方法来自 JavaScript post request like a form submit 主题。

毕竟

protect_from_forgery :except => :form_csv

在控制器中禁用 pay_csv 请求的身份验证令牌。

糟糕的决定,但它对我有帮助……可能有更正确的方法吗?

维伦, 我试试,谢谢!

【讨论】:

    猜你喜欢
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    相关资源
    最近更新 更多