Как запускать загрузку с помощью Rails send_data из сообщения AJAX
Я пытаюсь использовать send_data
, чтобы вернуть изображение PNG в качестве ответа для запроса на отправку ajax. Как заставить браузер запускать загрузку при успешном обратном вызове?
Подробнее
Я создаю большое изображение base64 с помощью canvas.toDataURL()
, а затем отправляю его в Rails (v3.2.6). Rails декодирует его на двоичный PNG и отправляет изображение обратно клиенту.
Я также пробовал send_file
, но у него такая же проблема.
Другие опции
Ответы
Ответ 1
создать функцию в контроллере
def ajax_download
send_file "path_to_file/" + params[:file]
end
а затем в действии контроллера
respond_to do |format|
@java_url = "/home/ajax_download?file=#{file_name}"
format.js {render :partial => "downloadFile"}
end
и сделайте частичное имя папки с именем _downloadFile.js.erb и напишите эту строку
window.location.href = "<%[email protected]_url %>"
Ответ 2
Вы не можете загрузить файл на диск из JS. Это проблема безопасности. См. Сообщение в блоге ниже для хорошего обхода.
http://johnculviner.com/post/2012/03/22/Ajax-like-feature-rich-file-downloads-with-jQuery-File-Download.aspx