ホームページ ウェブフロントエンド jsチュートリアル Blod に基づく Ajax プログレス バー ダウンロード実装サンプル コード

Blod に基づく Ajax プログレス バー ダウンロード実装サンプル コード

May 22, 2018 pm 04:46 PM
ajax ダウンロード

この記事では主にBlodをベースにしたajaxプログレスバーダウンロード実装のサンプルコードを紹介していますが、編集者が非常に良いと思ったので、参考として共有させていただきます。編集者をフォローして見てみましょう

通常のブラウザのダウンロード

Web 開発では、ダウンロード機能を実装したい場合、新しい Web ページを使用するか、iframe を使用することがよくあります。実装は実際には非常に簡単です:

<a target="_blank" href="download.zip" rel="external nofollow" >点击下载</a>
//或者
<iframe style="display:none" src="download.zip"></iframe>
ログイン後にコピー

ユーザーがタグをクリックして新しいタブをポップアップ表示した後、または iframe を開いた後、ブラウザーはダウンロード応答を受け入れ、添付ファイルをダウンロードします。実際、いわゆる添付ファイルのダウンロードとは、ブラウザが応答メッセージのヘッダーを読み取った後、ブラウザがダウンロード プロンプト ボックスを生成し、ユーザーが確認した後にファイルのダウンロードを続行することを意味します。ファイルは実際にはストリームであり、ブラウザはこの送信プロセスを自動的に管理し、進行状況バー、ダウンロードの停止ボタン、続行ボタン、ダウンロードの更新ボタン、ダウンロードされたバイト数の表示ボタンなどを自動的に生成します。等。これはブラウザが自動的に行いますが、プロセス全体は私たちの制御下にはありません。

ajax download

ブラウザによるダウンロードのサポートは、基本的にニーズを満たすことができます。一般的なシナリオでは、他のダウンロード方法を検討することはほとんど意味がありません。ただし、ブラウザーのダウンロードでは満たせないシナリオがまだいくつかあります。たとえば、Web アプリケーションでダウンロードの進行状況を監視したり、ダウンロードの完了後に特定のイベントをトリガーしたり、Web アプリケーションがダウンロード プロセスを自動的にキャンセルしたりする必要があります。ワーカーを使用して、ダウンロードなどを実行するバックグラウンドを作成します。上記の状況では、Blod オブジェクトに基づいた ajax ダウンロードを使用できます。

Ajax による添付ファイルのダウンロードは、Ajax による添付ファイルのアップロードと同じであり、ブラウザーは ajax2.0 をサポートする必要があります。実際、いわゆるダウンロードは通常の ajax リクエストと何ら変わりません。ただし、ダウンロードは通常バイナリ ファイルであり、テキスト オブジェクトや JavaScript がカプセル化できるタイプを提供する必要はありません。これは血液です。したがって、応答タイプと responseType の値を「blod」に設定します。

var xhr =new XMLHttpRequest();
xhr.open(option.type ? option.type.toUpperCase() : &#39;GET&#39;, url, true);
xhr.responseType = &#39;blob&#39;;
ログイン後にコピー

では、XMLHttpRequest オブジェクトの responseType フィールドの値が blob である必要があります。では、血液オブジェクトとは何でしょうか?

blod オブジェクト

MDN では、次のように説明されています:

Blob オブジェクトは、読み取り専用の生データを含むファイルのようなオブジェクトです。 Blob オブジェクト内のデータは、JavaScript のネイティブ形式である必要はありません。ファイル インターフェイスは Blob に基づいており、Blob の機能を継承し、ユーザーのコンピューター上のローカル ファイルのサポートを拡張します。 Blob オブジェクトを通じて、バイナリ ストリームをオブジェクトにカプセル化できます。

HTML5 のファイル関連 API を知っている場合は、blod オブジェクトについてもよく知っているはずです。 BLOD はバイト ストリームをファイルにカプセル化できます。XMLHttpRequest オブジェクトの responseType 値が blob である場合、応答本文を blob オブジェクトとして扱うことができます。

xhr.onload = function () {
  //对于重定向的文件不予理会
  if (this.status >= 200 && this.status < 300) {
    var blob = new Blob([this.response], {type: this.response.type});
  }
}
ログイン後にコピー

ajax を使用してファイルをダウンロードし、そのファイルを BLOB オブジェクトとして保存し、ブラウザーにキャッシュします。では、ユーザーがファイルをハード ドライブに保存できるようにするにはどうすればよいでしょうか?

BLOB オブジェクトをハードディスクに保存します

ブラウザのダウンロードを模倣し、タグまたは iframe を生成してから URL を生成することで、ブラウザに戻ってダウンロードできるようになります。添付ファイルウィンドウを保存するためのファイルを自動的に生成します。 URL は URL.createObjectURL(blob) メソッドを使用して取得できます。URL.createObjectURL は Blob オブジェクトと File オブジェクトをサポートし、現在のユーザーがこれらのオブジェクト (もちろんダウンロードを含む) にアクセスできるように仮想 URL を生成できます。サーバーから直接ダウンロードするのとは異なり、ここでのダウンロードはクライアントの内部で行われ、ネットワーク IO を使用しないため、ダウンロードはほぼ瞬時に行われます。ただし、URL を生成した後は解放する必要があります。そうしないと、BLOB リソースはガベージ コレクションされません。URL.revokeObjectURL を使用して URL を解放し、BLOB リソースを解放できます。 IE ブラウザーの場合、独自の Blob オブジェクト処理戦略のセットがあり、これは 2 つのナビゲーター メソッド (msSaveOrOpenBlob と msSaveBlob) です。

//ie的下载
if (window.navigator.msSaveOrOpenBlob) {
  navigator.msSaveBlob(blob, fileName);
} else {
  //非ie的下载
  var link = document.createElement(&#39;a&#39;);
  link.href = window.URL.createObjectURL(blob);
  link.download = fileName;
  link.click();
  window.URL.revokeObjectURL(link.href);
}
ログイン後にコピー

プログレスバーとダウンロードキャンセル

実際には、XMLHttpRequestオブジェクトにはprogressイベントがありますが、結局のところ、一般的なリクエストは無視されます。瞬時に行われるため、進行状況バーを設定する必要はありません。ただし、ajax のダウンロードは異なります。添付ファイルのダウンロードには時間がかかるため、進行状況イベントをリッスンすることで、ダウンロードの進行状況を取得することができます。

ダウンロードをキャンセルするには、XMLHttpRequest オブジェクトの abort 関数を使用します。また、load イベントでダウンロードの完了を監視し、error イベントでダウンロードの失敗を監視できます。つまり、ajax ダウンロードと通常の ajax リクエストのイベントとメソッドはまったく同じです。

パフォーマンスの最適化と同一オリジンポリシー

Ajax ダウンロードは、長い接続と同様に、通常のリクエスト、特にダウンロードよりも多くの帯域幅を占有します。したがって、ダウンロード プロセス中に他の ajax リクエストがブロックされる可能性があるため、ajax によってダウンロードされたリソースとその他のリクエストされたリソースには異なるドメイン名を使用することが推奨されますが、これにより同一生成元ポリシーの問題という新たな問題が発生します。

同一生成元ポリシーはブラウザのセキュリティの基礎です。同一生成元ポリシーがなければ、どの Web サイトでも CSRF 攻撃を開始する可能性があります。ダウンロードされたリソースの URL が現在のページの URL と同じ生成元であることが保証できない場合、同一生成元ポリシーがトリガーされ、ダウンロードは失敗します。そのため、Ajax クロスドメイン処理が必要です。 iframe および新しいタブのダウンロード方法と比較すると (実際、iframe にも同一生成元ポリシーがあり、iframe 内のページと親ページが相互にコンテンツにアクセスできないようにする必要がありますが、ダウンロード機能にはこのようなものは含まれません)そのため、iframe のダウンロードは同一生成元ポリシーの影響を受けません)、ajax のダウンロードは本質的に ajax であるため、ブラウザーの同一生成元ポリシーの影響を受けます。したがって、オリジナル以外のソースから添付ファイルをダウンロードする場合、添付ファイルが配置されているサーバーは cors をサポートする必要があります。サーバーが Cookie にアクセスする必要がある場合は、XMLHttpRequest オブジェクトの withCredentials を true に設定する必要があります。

同時に、同一生成元ポリシーにより、通常のダウンロード サービスは cors 処理を行わないため、ajax を使用してサードパーティのリソースをダウンロードすることはできません。結局のところ、iframe のダウンロードや新しいタブのダウンロードは影響を受けません。同一生成元ポリシーの影響を受けるため、cors 処理を行う必要はありません。これにより、Ajax ダウンロードの適用可能性が大幅に制限されます。

概要:

最後に、ajax ダウンロードの使用シナリオをまとめます:

1. ユーザーのダウンロードの進行状況が遅すぎることがわかった場合など、ダウンロードの進行状況の監視が必要なシナリオであり、他の解決策を積極的に提供します。

2. ダウンロードの完了後に、デスクトップ通知ポップアップなどの特定のイベントをトリガーする必要があります。

3. バックグラウンドでのダウンロードが必要です。たとえば、ユーザーが Web ページを開いた後に添付ファイルをこっそりダウンロードしてキャッシュし、ユーザーが本当に添付ファイルをダウンロードしたいときにローカルに保存することができます。ワーカーを使用してバックグラウンド スレッドを作成し、ダウンロード プロセスがページの通常のレンダリングに影響を与えないようにすることもできます。

4. 添付ファイルはダウンロードする必要があり、ハードディスクに保存する必要はありませんが、Web アプリは添付ファイルを直接処理します。たとえば、pdf.js はダウンロードに ajax を使用します。

最後に、作者の ajax ダウンロード デモを紹介します: ajaxDownloadDemo_jb51.rar

上記は私がまとめたもので、将来的には皆さんのお役に立てれば幸いです。

関連記事:

単純なエンティティクラスとxmlファイルを相互に変換する方法

Ajaxを使用してRazorページを部分的に更新する(グラフィックチュートリアル)

AjaxFileUpload+Struts2でマルチファイルアップロード機能を実装する

以上がBlod に基づく Ajax プログレス バー ダウンロード実装サンプル コードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

紅果短編ドラマのエピソードをダウンロードする方法 紅果短編ドラマのエピソードをダウンロードする方法 Mar 11, 2024 pm 09:16 PM

紅国短編劇は短編劇を鑑賞するためのプラットフォームであるだけでなく、小説やその他の刺激的なコンテンツを含む豊富なコンテンツの宝庫でもあります。これは間違いなく、読書が好きな多くのユーザーにとって大きな驚きです。ただし、多くのユーザーは、Hongguo Short Play でこれらの小説をダウンロードして視聴する方法をまだ知りません。以下では、この Web サイトの編集者が詳細なダウンロード手順を提供します。必要なすべての人に役立つことを願っています。パートナー。紅果寸劇をダウンロードして視聴するにはどうすればよいですか? 答え: [紅果寸劇] - [オーディオブック] - [記事] - [ダウンロード]。具体的な手順: 1. まず、Hongguo Short Drama ソフトウェアを開き、ホームページに入り、ページ上部の [本を聴く] ボタンをクリックします; 2. 次に、小説ページで多くの記事コンテンツが表示されます。

壁紙エンジンで別のアカウントにログインした後、他の人の壁紙をダウンロードした場合はどうすればよいですか? 壁紙エンジンで別のアカウントにログインした後、他の人の壁紙をダウンロードした場合はどうすればよいですか? Mar 19, 2024 pm 02:00 PM

自分のコンピュータで他人の Steam アカウントにログインし、その他人のアカウントに壁紙ソフトウェアがインストールされている場合、自分のアカウントに切り替えた後、Steam は他人のアカウントに登録されている壁紙を自動的にダウンロードします。 Steam クラウドの同期をオフにします。別のアカウントにログインした後に、wallpaperengine が他の人の壁紙をダウンロードした場合の対処方法 1. 自分の steam アカウントにログインし、設定でクラウド同期を見つけて、steam クラウド同期をオフにします。 2. 以前にログインしたことのある他の人の Steam アカウントにログインし、壁紙クリエイティブ ワークショップを開き、サブスクリプション コンテンツを見つけて、すべてのサブスクリプションをキャンセルします。 (将来壁紙が見つからない場合は、まず壁紙を収集してからサブスクリプションをキャンセルできます) 3. 自分の Steam に戻ります。

115://で始まるリンクをダウンロードするにはどうすればよいですか?ダウンロード方法の紹介 115://で始まるリンクをダウンロードするにはどうすればよいですか?ダウンロード方法の紹介 Mar 14, 2024 am 11:58 AM

最近、多くのユーザーから、115:// で始まるリンクをダウンロードするにはどうすればよいかという質問が編集者に寄せられました。 115:// で始まるリンクをダウンロードしたい場合は、115 ブラウザを使用する必要があります。115 ブラウザをダウンロードしたら、以下のエディタによって作成されたダウンロード チュートリアルを見てみましょう。 115:// で始まるリンクをダウンロードする方法の紹介 1. 115.com にログインし、115 ブラウザをダウンロードしてインストールします。 2. 115 ブラウザのアドレス バーに chrome://extensions/ と入力し、拡張機能センターに入り、Tampermonkey を検索して、対応するプラグインをインストールします。 3. 115 ブラウザのアドレス バーに「Grease Monkey Script: https://greasyfork.org/en/」と入力します。

スーパーピープル ゲームのダウンロードとインストール方法の紹介 スーパーピープル ゲームのダウンロードとインストール方法の紹介 Mar 30, 2024 pm 04:01 PM

superpeople ゲームは、steam クライアントを通じてダウンロードできます。このゲームのサイズは約 28G です。ダウンロードとインストールには通常 1 時間半かかります。ここでは、具体的なダウンロードとインストールのチュートリアルを紹介します。グローバルクローズドテストへの新しい申請方法 1) Steamストア(Steamクライアントダウンロード)で「SUPERPEOPLE」を検索 2) 「SUPERPEOPLE」ストアページ下部にある「SUPERPEOPLEクローズドテストへのアクセスをリクエスト」をクリック 3) request accessボタン、Steamライブラリで「SUPERPEOPLECBT」ゲームが確認できます 4)「SUPERPEOPLECBT」内のインストールボタンをクリックしてダウンロード

Quarkネットワークディスクをローカルにダウンロードするにはどうすればよいですか? Quark Network Diskからダウンロードしたファイルをローカルコンピュータに保存する方法 Quarkネットワークディスクをローカルにダウンロードするにはどうすればよいですか? Quark Network Diskからダウンロードしたファイルをローカルコンピュータに保存する方法 Mar 13, 2024 pm 08:31 PM

多くのユーザーはQuark Network Diskを使用するときにファイルをダウンロードする必要がありますが、ファイルをローカルに保存したいので、どのように設定すればよいでしょうか?このサイトでは、Quark Network Diskからダウンロードしたファイルをローカルコンピュータに保存する方法を詳しくユーザーに紹介します。 Quarkネットワークディスクからダウンロードしたファイルをローカルコンピュータに保存する方法 1. Quarkを開き、アカウントにログインし、リストアイコンをクリックします。 2. アイコンをクリックした後、ネットワークディスクを選択します。 3. Quark Network Diskに入ったら、「My Files」をクリックします。 4. [マイ ファイル] に入ったら、ダウンロードするファイルを選択し、三点アイコンをクリックします。 5. ダウンロードしたいファイルにチェックを入れ、「ダウンロード」をクリックします。

foob​​ar2000のダウンロード方法は? -foobar2000の使い方 foob​​ar2000のダウンロード方法は? -foobar2000の使い方 Mar 18, 2024 am 10:58 AM

foob​​ar2000 は、音楽リソースをいつでも聴くことができるソフトウェアです。あらゆる種類の音楽をロスレス音質で提供します。音楽プレーヤーの強化版により、より包括的で快適な音楽体験を得ることができます。その設計コンセプトは、高度なオーディオをコンピュータ上で再生可能 デバイスを携帯電話に移植し、より便利で効率的な音楽再生体験を提供 シンプルでわかりやすく、使いやすいインターフェースデザイン 過度な装飾や煩雑な操作を排除したミニマルなデザインスタイルを採用また、さまざまなスキンとテーマをサポートし、自分の好みに合わせて設定をカスタマイズし、複数のオーディオ形式の再生をサポートする専用の音楽プレーヤーを作成します。過度の音量による聴覚障害を避けるために、自分の聴覚の状態に合わせて調整してください。次は私がお手伝いさせてください

Quark Network Diskからファイルをダウンロードする場所_Quark Network Diskをローカルエリアにダウンロードして共有する方法 Quark Network Diskからファイルをダウンロードする場所_Quark Network Diskをローカルエリアにダウンロードして共有する方法 Mar 21, 2024 pm 03:57 PM

Quark は、便利で実用的なネットワーク ディスク ツールとして、ユーザーがお気に入りのリソースを簡単に入手できるように支援します。編集者が教えてくれるので、一緒に学びましょう! Quark Network Diskをローカル共有方法にダウンロードする方法 1. まずQuarkソフトウェアを開き、ホームページに入り、右下の[クラウドアイコン]をクリックします; 2. 次に、Quark Network Diskページで[ドキュメント]をクリックします機能; 3. 次に、ドキュメント ページに移動し、ダウンロードしたいファイルを選択し、[三点アイコン] をクリックします; 4. 最後にクリックした後、ポップアップ ダイアログ ボックスで [ダウンロード] をクリックします。

北楽湖童謡のダウンロード方法 北楽湖童謡のダウンロード方法 Mar 28, 2024 am 11:10 AM

北楽湖のわらべ歌は、子どもたちの成長に欠かせない伴奏として、その陽気なメロディー、生き生きとした絵、そして楽しく教育的な内容で、数え切れないほどの親子に愛されてきました。赤ちゃんがいつでもどこでも童謡の楽しさを味わえるように、多くの親はベイレフの童謡を携帯電話やタブレットにダウンロードして、いつでも子供に聞かせたいと考えていますが、ベイレフの童謡を保存する方法は次のとおりです。携帯電話では、このチュートリアルで詳しく説明しますので、まだ理解していないユーザーは、この記事と合わせて読んでください。 Beilehu童謡 ダウンロード童謡 マルチピクチャチュートリアル: ソフトウェアを開き、ダウンロードしたい童謡を選択してください。エディタでは「クラシック童謡」を例にしています。 2. 童謡スターの下にある「ダウンロード」ボタンをクリックします。

See all articles