Remotipartは答えではないかもしれません
免責事項はほとんどありません。私自身はRemotipartgemを使用していませんが、ファイルのアップロードとRailsの処理に多くの時間を費やしてきました。残念ながら、Remotipartの私の理解に基づくと、進行状況イベントは基盤となるiFrameトランスポート戦略でサポートされていないため、探している進行状況バーのユースケースをサポートしません。
説明するために、ブラウザレベルで開発者として利用できるさまざまなオプションを見てみましょう。これらのオプションは、使用しているサーバー側のフレームワークやライブラリに関係なく当てはまります。
更新なしのファイルアップロード
- iFrameトランスポート
- サポートされているプラグイン(Flash / Silverlight /その他)
- HTML5(ファイルおよびXHR2 API、オプションでドラッグアンドドロップ)
オプション1-iFrameトランスポート(Remotipartの戦略)
更新なしのページ読み込みのための最も古く、最も広くサポートされている(ブラウザの観点から)戦略は、基本的にフォームの標準的な送信を行うことを含みますが、ターゲットとして非表示のiFrameを使用します。残念ながら、このオプションは進行状況イベントをサポートしていません。次のリンクを参照してください(RemotipartのREADMEから):
http ://www.alfajango.com/blog/ajax-file-uploads-with-the-iframe-method/
オプション2-サポートされているプラグイン
アップロードモジュール(通常はFlashまたはSilverlightで記述されています)を使用して、過去のブラウザー標準によって課せられた制限を回避します。複数のファイルのアップロードと進行状況のイベントを許可しますが、ユーザーはサードパーティのブラウザー拡張機能をインストールする必要があります(ただし、ほとんどのデスクトップブラウザーにはFlashが搭載されていると想定できます)。
オプション3-HTML5(参照する記事で使用される戦略)
したがって、いつものように、HTML5は人生のすべての課題に対する答えです。FileおよびXHR2APIを使用すると、ブラウザー拡張機能なしで、進行状況イベントを含む複数ファイルのアップロードをサポートできます。これは、参照する記事で使用されている戦略であり、一般的には今後のベストプラクティスですが、これをサポートしていないブラウザを使用している多くのユーザーに見られる可能性があるという警告があります。
私がやること
私は、古いブラウザで正常に機能を低下させながら、最新かつ最高のソリューションを活用できるソリューションの大ファンです。そのことを念頭に置いて、ファイルのアップロードにはPluploadというライブラリを使用します:
http ://www.plupload.com/
Pluploadには、1つのライブラリにバンドルされた4つのアップロード「ランタイム」が含まれています。
- HTML5(オプション3)
- フラッシュ(オプション2)
- Silverlight(オプション2)
- HTML4(オプション1)
設定の順序を構成すると、Plupload JSランタイムは、ユーザーのブラウザーでサポートされている最初のランタイムをインテリジェントにロードします。ライブラリのJS部分は、使用されているランタイムに関係なく、プログラムの対象となる一貫したイベントを提供するという非常に優れた機能を果たします。開発者として、これは、使用されているランタイムに関係なく「正しく機能する」優れたUIの構築に焦点を当てましょう。
もちろん、HTML4まで劣化すると、進行状況の更新を取得する機能が失われるため、その準備ができているはずです。
お役に立てば幸いです。Pluploadの使用に興味がある場合は、役立つ記事や回答がたくさんあります。