2016-08-24 4 views
0

Приложение My Rails 3.1 делает вызов веб-службы для получения файла PDF, который затем мне нужно отправить в браузер для загрузки.Rails send_file/send_data - Невозможно прочитать файл - после вызова веб-службы

Ответ XML это что-то вроде этого:

<RenderResponse> 
    <Result>blahblah this is the file info<Result> 
    <Extension>PDF</Extension> 
    <MimeType>application/pdf</MimeType> 
</RenderResponse> 

Я затем пытается преобразовать «Результат» тег в файл, как так:

@report = @results[:render_response][:result] 
@report_name = MyReport.pdf 
File.open(@report_name, "w+") do |f| 
    f.puts @report 
end 

наконец я пытаюсь отправить на Браузер:

Это приводит к ошибке: «Не удается прочитать файл», и он выплевывает весь текст из тег результатов.

Если я использую send_data, как так:

send_data File.read(@report_name).force_encoding('BINARY'), :filename => @report_name, :type => "application/pdf; charset=utf-8", :disposition => "attachment" 

загружаемый файл работает, но я получаю файл с 0KB и ошибки Adobe, который говорит файл «MyReport.pdf» не может быть открыт, потому что «его либо не поддерживаемый тип файла или он был поврежден ».

Как я могу получить информацию о файле ответа XML, создать файл и поток в браузере?

+0

вы можете попробовать с этим 'File.open (файл, 'г') делать | F | send_data f.read.force_encoding ('BINARY'),: filename => filename,: type => "application/pdf",: disposition => "attachment" end' –

+0

Спасибо за комментарий. Я пробовал это, и это не решило эту проблему. Я нашел решение и опубликую его. – user2967603

ответ

0

Я нашел решение. send_file - это правильный механизм потока, который нужно использовать, но мне нужно было декодировать строку во время записи в файл. Мне также нужно добавить параметр «b» в вызов File.open.

Это работает:

File.open(@report_name, "wb+") do |f| 
    f.puts Base64.decode64(@report) 
end 



@file = File.open(@report_name, 'r') 

    send_file @file, :filename => @report_name, :type => "application/pdf; charset=utf-8", :disposition => "attachment" 

 Смежные вопросы

  • Нет связанных вопросов^_^