2016-10-19 117 views
3

我使用rails 3.2.22.4和ruby 2.2.4。我正在测试send_file功能。我在服务器日志中获得“文件发送”,但我无法看到它正在浏览器中下载。点击保存按钮会调用这个动作。send_file/send_data没有发送文件下载

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 click事件调用。

$("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) 

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

任何帮助将不胜感激。 在此先感谢。

+0

也许不是一个解决方案,但你可以试试这个'由send_file(文件:文件名=> 'my_file.txt')'? – Sajan

+0

我刚刚复制你的代码,它的工作原理。也许有些东西你没有放在这里? – lcguida

+0

@lcguida我已经尝试了我的应用程序中的相同代码(测试应用程序),它的工作原理。我修改了这个问题,请看看。 – Ajith

回答

0

我不知道为什么这种方法工作。但是服务我的目的。

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

感谢,

阿吉特