検索
ホームページウェブフロントエンドjsチュートリアルBlod を使用して Ajax プログレスバーのダウンロードを行う

今回は、Blod を使用して Ajax プログレス バーのダウンロードを行う方法を説明します。Blod を使用して Ajax プログレス バーのダウンロードを行うための 注意事項 は何ですか。実際のケースを見てみましょう。

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

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

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

ajax download

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

Ajax による添付ファイルのダウンロードは、Ajax による添付ファイルのアップロードと同じであり、ブラウザーは ajax2.0 をサポートする必要があります。実際、いわゆるダウンロードは通常の Ajax リクエストと何ら変わりません。ただし、ダウンロードは通常、テキスト オブジェクトや JSON オブジェクトではなく、バイナリ ファイルです。

JavaScript が必要です。このバイナリ ファイルをカプセル化できます。これは血液です。したがって、応答タイプと responseType の値を「blod」に設定します。

var xhr =new XMLHttpRequest();
xhr.open(option.type ? option.type.toUpperCase() : 'GET', url, true);
xhr.responseType = 'blob';
では、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  ajax を使用してファイルをダウンロードし、そのファイルを BLOB オブジェクトとして保存し、ブラウザーにキャッシュします。では、ユーザーがファイルをハード ドライブに保存できるようにするにはどうすればよいでしょうか? <p style="text-align: left;"></p><p style="text-align: left;">BLOB オブジェクトをハードディスクに保存します<strong></strong></p>ブラウザのダウンロードを模倣し、タグまたは iframe を生成してから URL を生成することで、ブラウザに戻ってダウンロードできるようになります。添付ファイルウィンドウを保存するためのファイルを自動的に生成します。 URL は URL.createObjectURL(blob) メソッドを使用して取得できます。URL.createObjectURL は Blob オブジェクトと File オブジェクトをサポートし、現在のユーザーがこれらのオブジェクト (もちろんダウンロードを含む) にアクセスできるように仮想 URL を生成できます。サーバーから直接ダウンロードするのとは異なり、ここでのダウンロードはクライアントの内部で行われ、ネットワーク IO を使用しないため、ダウンロードはほぼ瞬時に行われます。ただし、URL を生成した後は解放する必要があります。そうしないと、BLOB リソースはガベージ コレクションされません。URL.revokeObjectURL を使用して URL を解放し、BLOB リソースを解放できます。 <p style="text-align: left;">ie ブラウザー<a href="http://www.php.cn/browsers/browsers-explorer.html" target="_blank"> の場合、独自の Blob オブジェクト処理戦略のセットがあり、それは 2 つのナビゲーター メソッド msSaveOrOpenBlob と msSaveBlob です。 </a></p><pre class="brush:php;toolbar:false">//ie的下载
if (window.navigator.msSaveOrOpenBlob) {
  navigator.msSaveBlob(blob, fileName);
} else {
  //非ie的下载
  var link = document.createElement('a');
  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

この記事の事例を読んだ後は、この方法を習得したと思います。さらにエキサイティングな内容については、他の関連記事に注目してください。 PHP中国語ウェブサイトです!

推奨読書:

C と View の間でデータを交換する方法

フロントエンドとバックエンド間の Ajax 対話メソッドとは何ですか

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

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

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)Apr 11, 2025 am 08:23 AM

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)Apr 11, 2025 am 08:22 AM

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScript:Web言語の汎用性の調査JavaScript:Web言語の汎用性の調査Apr 11, 2025 am 12:01 AM

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの進化:現在の傾向と将来の見通しJavaScriptの進化:現在の傾向と将来の見通しApr 10, 2025 am 09:33 AM

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

javascriptの分解:それが何をするのか、なぜそれが重要なのかjavascriptの分解:それが何をするのか、なぜそれが重要なのかApr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

pythonまたはjavascriptの方がいいですか?pythonまたはjavascriptの方がいいですか?Apr 06, 2025 am 12:14 AM

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。

JavaScriptをインストールするにはどうすればよいですか?JavaScriptをインストールするにはどうすればよいですか?Apr 05, 2025 am 12:16 AM

JavaScriptは、最新のブラウザにすでに組み込まれているため、インストールを必要としません。開始するには、テキストエディターとブラウザのみが必要です。 1)ブラウザ環境では、タグを介してHTMLファイルを埋め込んで実行します。 2)node.js環境では、node.jsをダウンロードしてインストールした後、コマンドラインを介してJavaScriptファイルを実行します。

See all articles

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SublimeText3 Mac版

SublimeText3 Mac版

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

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境