【问题标题】:send_file/send_data not sending file for downloadingsend_file/send_data 不发送文件进行下载
【发布时间】:2017-03-01 04:20:14
【问题描述】:

我正在使用 rails 3.2.22.4 和 ruby​​ 2.2.4。我正在测试 send_file 功能。我在服务器日志中收到“文件已发送”,但我看不到它正在浏览器中下载。保存按钮单击将调用此操作。

def save_trunk_logs
  device_id = params['device_id']
  trunk_name = params['trunk_name'] ||= "test"
  data =""
  file = "#{trunk_name}.txt"
  trunk_logs = TrunkStatusLog.select([:LogType, :LogMessage, :EpochLoggedAtTime]).where(DeviceID: device_id)
  File.open(file, "w+") do |aFile|
    aFile.write("Trunk Name : #{trunk_name}\n")
    aFile.write("*"*100)
    aFile.write("\n")
    aFile.write("Time Stamp"+"\t"+"Log Message\n")
    trunk_logs.each do |msg|
      data =format_log_messages msg
      aFile.write("#{data}\n")
    end
  end
  send_file file, :type => 'text/plain; charset=UTF-8', :disposition => 'attachment'
end

此操作由 button_to 点击事件调用。

$("input[value='Download']").on('click', function () {
    $.ajax({
        type: "POST",
        url: "/dm/trunk_test_tools/save_trunk_logs?device_id="+selectedTrunkDeviceId+"&trunk_name="+selectedTrunkDeviceName,
       }
    })
});

每次我点击下载按钮 2 调用。服务器端日志粘贴在下面

Started POST "/X/Y/save_trunk_logs?device_id=9&trunk_name=SIP_1" for      10.198.2.208 at 2016-10-24 12:58:58 +0530
Processing by ABCController#save_trunk_logs as */*
Parameters: {"device_id"=>"9", "trunk_name"=>"SIP_1"}
Sent file SIP_1.txt (0.0ms)
Completed 200 OK in 98.0ms (ActiveRecord: 62.0ms)

Started POST "/X/Y/save_trunk_logs" for 10.198.2.208 at 2016-10-24 12:58:59 +0530
Processing by TrunkTestToolsController#save_trunk_logs as HTML
Parameters: {"authenticity_token"=>"3HSxduOUwccwo="}
sent file test.txt (0.0ms)
Completed 200 OK in 17.0ms (ActiveRecord: 3.0ms)

我不明白为什么要打第二个电话以及从哪里打出来的。在第一个服务器调用中,它说文件已发送但不下载。在第二个呼叫文件发送以及下载。但它没有用。参数不正确。真实性令牌我没有作为参数发送。(实际数据查询被跳过。)

任何帮助将不胜感激。 提前致谢。

【问题讨论】:

  • 也许不是解决方案,但你可以试试这个send_file( file, :filename => 'my_file.txt' ) 吗?
  • 我刚刚复制了你的代码,它可以工作。也许有些东西你没有放在这里?
  • @lcguida 我也在我的应用程序(测试应用程序)中尝试了相同的代码并且它可以工作。我已经修改了问题,请看一下。

标签: ruby-on-rails ruby ruby-on-rails-3.2


【解决方案1】:

我不知道为什么这种方法有效。但符合我的目的。

$("#btn_id").on('click', function () {
    window.location = ypur api url;
});

谢谢,

阿吉特

【讨论】:

    猜你喜欢
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 2022-01-21
    • 2014-03-26
    • 2011-03-28
    • 2017-09-24
    相关资源
    最近更新 更多