いくつかの経験の後、HTML5機能、つまりFile APIを使用したファイルのダウンロードに関する小さな虎の巻記事を書くことにしました。
続きを読む:
- ブラウザのサポート。
- フォームデータを介してダウンロードします。
- ファイルリーダー経由でダウンロードします。
1.ブラウザのサポート
もちろん、すべてのブラウザーが現在この機能を完全にサポートしているわけではありません。 IEはバージョン10のFile APIのみをサポートするため、IEについては忘れてしまいます。 残りの、より高度なブラウザ、およびこれらは単なるChrome、Firefox、Opera、Safariであり、すべてがそれほどスムーズでもありません。 もちろん、彼らは「前向き」になろうとしますが、今のところ誰もが成功するわけではありません。
HTML 5では、ファイルを非同期に読み取り、サーバーに送信する2つの方法があります。ファイルリーダーとフォームデータオブジェクトを使用する方法です。 原則として、ファイルをアップロードするためのものであり、サーバーにファイルを送信する方法は関係ありません。 正確には、XMLHttpRequestオブジェクトはファイルの送信を担当し、ファイルリーダーとフォームデータはファイルの読み取りとそのXHRの「フィード」のみを許可します。 これらのオブジェクトは、さまざまなタスク用に設計されています。 ファイルリーダーは、ブラウザ側でファイルを操作するように設計されています。 つまり、ファイルがサーバーにアップロードされる前であっても、重量、種類、作成日などのパラメーターを見つけることができます。たとえば、画像はサーバーにダウンロードせずにすぐにユーザーに表示できます。 フォームデータは、フォームを作成し、サーバーにアップロードする前にフォームデータを管理するように設計されています。 そして、私たちが知っているように、入力タイプ=“ file”もフォームに存在し、それを通して、今までファイルを送信していました。 したがって、フォームを作成し、ファイルを添付して、XHR経由でサーバーに送信できます。
歌詞からアクションまで。 両方のブート例を検討してください。 ただし、最初に、ブラウザがFile APIを介してロードできるかどうかを判断することをお勧めします。 これを行うには、ファイルリーダーまたはフォームデータオブジェクトの存在を確認するだけです。 しかし! Safariはまだファイルリーダーをサポートしていないため、このオブジェクトを操作することはできません。 Yablofagiはinしており、すべてのユーザーを平等に愛しています。 したがって、現時点では、フォームデータの存在が最も正しいチェックと見なされます。
if (window.FormData === undefined) {
2.フォームデータを介したダウンロード
最初に、すべてのイベントについて説明します。ファイルのドラッグ、ダウンロード用のブロックへの「スロー」などです。
$("#drop-block").bind(
さて、ファイルを直接読んでダウンロードしましょう:
function upload(files) {
3.ファイルリーダーからダウンロードする
ファイルリーダー自体は、ブラウザ側でファイルを操作するように設計されています。 このオブジェクトを使用してファイルをアップロードしてみましょう。 Safariにはファイルリーダーオブジェクトがないことを思い出してください!
if (window.FileReader === undefined) {
この記事は使用方法を説明するものではなく、HTML 5の機能を調べるためのガイドにすぎません。このコードは理想的なものではありません。 誰かが補完したり修正したりしてくれたら嬉しいです。