#静的ファイルのダウンロードが出来ないんだけど!!!
Rubyのsend_file
ってのを使ってる時に、こんな事が発生しました。
【結論】
JavaScriptの理解不足。
( 'ω')ハズカシイ...
#こんな恥ずかしい事をしてました。
っていうのをまとめるのが面倒なんですけど、
Teratailで質問を投げました。
【Ruby on Rails】静的ファイルのダウンロードが出来ない。
回答者Aさん
$.ajax
でリクエストを飛ばした場合、結果はJavaScriptに届くので、ブラウザ側が直接反応するわけではありません。
GETでダウンロード可能として、<a href>
でリンクさせるか、POSTが必要ならダミーのフォームを作成して、それを送信する形にするなど、ブラウザのHTMLでアクションを起こすのがいちばんスッキリします。
回答者Bさん
JavaScriptでRequestを投げて、そのResponseを受け取ったのもJavaScriptですので。
最終的にJavaScript側でファイルに保存するなりの処理をしなければメモリ上にしか展開されませんよ。
ブラウザの機能を使ってダウンロードさせるのであれば、ajaxでRequestを投げるのではなく、ブラウザにそのURLを開かせた方が楽だと思います。
つまりは、
僕のJavaScriptの挙動に対する理解不足。
とても悲しい。
#結果的に、
ダミーのform作って、submitさせる事で上手くいきました。
$('<form/>', {action: 'download', method: 'post', name: "tmp"}) // jsでform作って
.appendTo(document.body) // 既存のbodyにくっつけて
.submit(); // 送信
// 要素を消しておかないと延々とformが増え続けるので消しておく
$('[name="tmp"]').remove();