send_file/send_data not sending file for downloading
我正在使用Rails 3.2.22.4和ruby 2.2.4。我正在测试send_file功能。我在服务器日志中收到"文件已发送",但看不到它正在浏览器中下载。单击"保存"按钮将调用此操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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}\ ") aFile.write("*"*100) aFile.write("\ ") aFile.write("Time Stamp"+"\\t"+"Log Message\ ") trunk_logs.each do |msg| data =format_log_messages msg aFile.write("#{data}\ ") end end send_file file, :type => 'text/plain; charset=UTF-8', :disposition => 'attachment' end |
此操作由button_to单击事件调用。
1 2 3 4 5 6 7 | $("input[value='Download']").on('click', function () { $.ajax({ type:"POST", url:"/dm/trunk_test_tools/save_trunk_logs?device_id="+selectedTrunkDeviceId+"&trunk_name="+selectedTrunkDeviceName, } }) }); |
每次我点击下载按钮2个电话。服务器端日志粘贴在下面
1 2 3 4 5 6 7 8 9 10 11 | 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) |
我不明白为什么拨打第二通电话,以及从何处拨打第二通电话。在第一个服务器调用中,它说已发送文件但未下载。在第二个呼叫文件被发送和下载。但这没有用。参数不正确。我没有将真实性令牌作为参数发送。(跳过了实际数据查询。)
任何帮助将不胜感激。
预先感谢。
我不知道为什么这种方法有效。但是符合我的目的。
1 2 3 | $("#btn_id").on('click', function () { window.location = ypur api url; }); |
谢谢,
阿吉斯