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)
我不明白爲什麼第二個電話是從哪裏做出來的。在第一個服務器調用它說文件已發送但不下載。在第二個通話文件中發送和下載。但它是沒用的。參數不正確。真實性令牌,我不發送作爲參數(實際數據查詢被跳過)。
任何幫助將不勝感激。 在此先感謝。
也許不是一個解決方案,但你可以試試這個'由send_file(文件:文件名=> 'my_file.txt')'? – Sajan
我剛剛複製你的代碼,它的工作原理。也許有些東西你沒有放在這裏? – lcguida
@lcguida我已經嘗試了我的應用程序中的相同代碼(測試應用程序),它的工作原理。我修改了這個問題,請看看。 – Ajith