3

これは、さまざまな方法で尋ねられる一般的な質問です。以下にいくつかのリンクを集めて、それらが機能しない理由を説明します。以下の完全な解決策を探しています。

私が開発しているWebアプリケーションでは、次の要件を持つAJAX風のファイルをダウンロードする必要があります

  1. ユーザーはリンクをクリックしてファイルをダウンロードできます。新しいページに移動することなく、通常の「名前を付けて保存..」ダイアログが表示され、Web ブラウザーでファイルをダウンロードするのに慣れています。
  2. 何らかの理由でサーバーがファイルの提供に失敗した場合は、javascript コールバックを呼び出す必要があります。同様に、サーバーがファイルを正常に提供した場合
  3. HTTP要求ヘッダーを変更して、要求のContent-Type HTTP ヘッダーなどを指定できるようにする必要がある
  4. すべての A グレード ブラウザをサポート

これまでに調べたこと:

a. jquery.fileDownloadは、フォーム送信、非表示の iframe、およびサーバーに特定の Cookie を設定させることを組み合わせて使用​​することにより、要件 1、2、および 4 を非常にエレガントに解決します。私はこのプロジェクトに非常に精通しています (これにも貢献しています)。ただし、要件 3 はサポートされていません。これは、HTML フォームの送信と iframe (このライブラリが使用するもの) では、要求されたサーバー リソースに HTTP ヘッダーを指定できないためです。( jdownloaderも同様の iframe/form 手法を使用しますが、要件 3 も解決しません)。

b. XMLHttpRequest を使用してファイルからバイナリ データを取得することは可能です (さまざまなブラウザーのさまざまなハック ( link 1link 2link 3link 4link 5link 6link 7link 8 ) を使用)。しかし、それらのどれも要件 1 に対応します。バイナリ データは JavaScript 変数に保存できますが、ブラウザの [名前を付けて保存] ダイアログを呼び出して、ユーザーがこのバイナリ データをハード ドライブ上のファイルに保存できるようにする方法はありません。

c. このリンク( 「DOWNLOAD + SAVE FILES TO THE HTML5 FILE SYSTEM」という見出しの下) には、XHR2 を使用した完全なエンドツーエンドのソリューションがあり、要件 1、2、および 3 に対応しています。 )。

そこに完全な解決策はありますか?

編集 さらにいくつかのオプションがあります-テストする予定です。おそらく唯一の選択肢は、普遍的な解決策を作成するためにすべてのハック/解決策を集めて、この問題のライブラリを開発することです。

  1. 以下のファイバーテックのソリューションによると:上記のソリューション(b)を使用してファイルを変数に保存してから:

    Internet Explorer の場合: IE の execCommand() を使用してこのデータを保存します。

    その他の場合: data uris ( link 2 ) と<a> タグの HTML5ダウンロード属性を使用して名前を指定します ( link 1link 2link 3link 4 )

  2. このリンクは、キャンバスのファイルダウンロード機能の使用に関係することについて言及しています

  3. Downloadify (およびこのリンクも)

  4. Webワーカーに関係する一見関連性のあるリンクですが、ファイルを生成するためにBlobとFileApiで何かを行っています。

4

1 に答える 1