今回は、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中国語ウェブサイトです!
推奨読書:
フロントエンドとバックエンド間の Ajax 対話メソッドとは何ですか
以上がBlod を使用して Ajax プログレスバーのダウンロードを行うの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

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

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

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

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

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

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

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

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

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

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境
