3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Ruby on Rails】【JavaScript】静的ファイルのダウンロードが出来ない。

Posted at

#静的ファイルのダウンロードが出来ないんだけど!!!
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させる事で上手くいきました。

dummy_form.js

$('<form/>', {action: 'download', method: 'post', name: "tmp"})  // jsでform作って
  .appendTo(document.body)  // 既存のbodyにくっつけて
  .submit();  // 送信

// 要素を消しておかないと延々とformが増え続けるので消しておく
$('[name="tmp"]').remove();
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?