2016-10-19 62 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; 
}); 

感謝,

阿吉特