24

send_dataajax投稿リクエストのレスポンスとしてPNG画像を返すために使用しようとしています。成功のコールバックでブラウザにダウンロードをトリガーさせるにはどうすればよいですか?

詳細

を使用して大きな base64 イメージを生成しcanvas.toDataURL()、それを Rails (v3.2.6) に投稿しています。Rails はそれをバイナリ PNG にデコードし、画像をクライアントに送り返します。

私も試しましsend_fileたが、同じ問題があります。

その他のオプション

  1. 画像クライアント側のダウンロード: (1) Safari は大きな base64 URLでクラッシュするため、これを行うことはできません。(2) Safari は、ダウンロードした画像のファイル名を指定する必要があるアンカー タグのダウンロード属性をまだサポートしていません。

  2. $.getの代わりにa を使用$.post:canvas.toDataURL()サーバーへのリクエストと共に送信する必要があるため、これは実行できません。GETrequests URI にはサイズ制限があります。

4

3 に答える 3

22

コントローラーで関数を作成する

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 = "<%=@java_url %>"
于 2013-07-08T12:10:12.997 に答える