2016-10-19 4 views
3

레일 3.2.22.4와 루비 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 클릭 이벤트에서 호출됩니다.

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

감사합니다,

Ajith