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)
두 번째 호출이 만들어진 이유와 만든 위치를 이해할 수 없습니다. 첫 번째 서버 호출에서 파일이 전송되었지만 다운로드하지 않는다고합니다. 두 번째 호출 파일은 다운로드와 함께 전송됩니다. 그러나 그것은 쓸모가 없다. 매개 변수가 올바르지 않습니다. 진위 토큰 매개 변수로 전송하지 않습니다. (실제 데이터 쿼리는 건너 뜁니다.)
도움이 되겠습니다. 미리 감사드립니다.
하지 솔루션 만이'send_file (파일 : 파일 이름 => 'my_file.txt') 시도 할 수 있습니다'를? – Sajan
방금 코드를 복사했는데 작동합니다. 여기에 넣지 않은 것이있을 수 있습니까? – lcguida
@lcguida 내 응용 프로그램 (테스트 응용 프로그램)에서 동일한 코드를 시도했지만 작동합니다. 나는 질문을 수정했고 좀 봐 주었다. – Ajith