概要Blob: ファイル操作をサポートするために特に使用されるフロントエンド上のバイナリオブジェクト ArrayBuffer: フロントエンドの汎用バイナリバッファ。配列に似ていますが、API と機能に多くの違いがあります。 バッファ: Node.js が提供するバイナリ バッファ。I/O 操作の処理によく使用されます。 ブロブまず、ファイル操作をサポートするために使用される Blob を紹介します。簡単に言うと、JS には File と Blob という 2 つのコンストラクターがあり、File は Blob のすべてのプロパティを継承します。 したがって、私たちの観点からすると、File オブジェクトは特別な Blob オブジェクトと見なすことができます。 フロントエンドエンジニアリングでは、どの操作で File オブジェクトを取得できますか? 参照: (注: ファイル API 仕様の現在のステータスはワーキング ドラフトです) 上で述べたように、File オブジェクトは特別な Blob オブジェクトなので、当然 Blob オブジェクトのメソッドを直接呼び出すことができます。 Blobの具体的なメソッドと、それを使ってどのような機能を実現できるかを見てみましょう。 Blob の動作BLOB は、window.URL.createObjectURL メソッドを通じて Blob URL に変換され、ファイルのダウンロードや画像の表示のリンクとして使用できます。 Blob URL によって実装されるダウンロード機能または表示機能は、単一のブラウザ内でのみ実行できます。サーバーに保存できない、またはサーバーに保存する意味がありません。 これはBlobの例です。非常に短いことがわかります。
長い Base64 形式のデータ URL と比較すると、Blob URL の長さは十分な情報を保存するには明らかに不十分であり、これはブラウザ内の「参照」のようなものだということです。この観点から見ると、Blob URL はブラウザ自体によって開発された疑似プロトコルです。 BLOB ダウンロード ファイルwindow.URL.createObjectURL を通じて Blob (ファイル) オブジェクトを受け取り、それを Blob URL に変換し、それを a.download プロパティに割り当てて、ページ上のこのリンクをクリックしてダウンロードすることができます。 <!-- html 部分 --> <a id="h">ダウンロードするにはここをクリック</a> <!-- js 部分 --> <スクリプト> var blob = new Blob(["Hello World"]); var url = window.URL.createObjectURL(blob); var a = document.getElementById("h"); a.download = "helloworld.txt"; a.href = URL; </スクリプト> 注意: ダウンロード属性は IE と互換性がありません。window.navigator.msSaveBlob メソッドまたはその他のメソッド (IE10/11) を通じて IE を最適化できます。 運用結果 ブロブ画像のローカル表示window.URL.createObjectURL によって生成された Blob URL を img.src に割り当てて画像を表示することもできます。 <!-- html 部分 --> <input type="file" id='f' /> <img id='img' スタイル="幅: 200px;高さ: 200px;" /> <!-- js 部分 --> <スクリプト> document.getElementById('f').addEventListener('change', 関数(e) { var ファイル = this.files[0]; 定数img = document.getElementById('img'); 定数 url = window.URL.createObjectURL(ファイル); url = 画像ファイル img.onload = 関数(){ // URL.createObjectURL を呼び出して以前に作成した URL オブジェクトを解放します。window.URL.revokeObjectURL(url); } }、 間違い); </スクリプト> 運用結果 BLOBファイルのアップロード
フロントエンド <!-- html 部分 --> <input type="file" id='f' /> <!-- js 部分 --> <スクリプト> 関数アップロード(blob) { var xhr = 新しい XMLHttpRequest(); xhr.open('POST', '/ajax', true); xhr.setRequestHeader('コンテンツタイプ'、'text/plain') xhr.send(blob); } document.getElementById('f').addEventListener('change', 関数(e) { var blob = this.files[0]; 定数CHUNK_SIZE = 20; 。 SIZE = blob.size; var 開始 = 0; var end = CHUNK_SIZE; (開始 < サイズ) { アップロード(blob.slice(開始、終了)); 開始 = 終了; 終了 = 開始 + CHUNK_SIZE; } }、 間違い); </スクリプト> ノード app.use(async (ctx, next) => { 次の()を待ちます。 ctx.path === '/ajax' の場合 { 定数 req = ctx.req; const body = parse(req); を待機します。 ctx.ステータス = 200; コンソールログ(本体); コンソールログ('---------------'); } }); ファイルの内容
運用結果 ファイルの内容をローカルで読み取るBlobまたはファイルオブジェクトを読み取って他の形式のデータに変換したい場合は、FileReaderオブジェクトのAPIを使用して操作できます。
次に、ファイルの内容を文字列として読み取ってみます。 <input type="file" id='f' /> document.getElementById('f').addEventListener('change', 関数(e) { var ファイル = this.files[0]; const リーダー = 新しい FileReader(); reader.onload = 関数(){ 定数コンテンツ = reader.result; console.log(コンテンツ); } reader.readAsText(ファイル); }、 間違い); 運用結果 以上はBlobの使い方を紹介しました。Blobがファイル用であることは簡単にわかります。つまり、ファイルオブジェクトであると言えます。同時に、Blobにはバイナリデータの詳細を操作する機能が欠けていることがわかります。たとえば、バイナリデータの一部を変更したい場合、Blobだけでは明らかに不十分です。このきめ細かい機能は、以下で紹介するArrayBufferによって完了できます。 配列バッファArrayBuffer の一般的な機能を図で見てみましょう。 同時に、ArrayBufferはネイティブJS配列とは大きく異なることに注意する必要があります。図をご覧ください。 以下、一つずつ詳しく紹介します ArrayBuffer形式でローカルデータを読み取るdocument.getElementById('f').addEventListener('change', 関数(e) { ファイル = this.files[0]; 新しいFileReader()を作成します。 fileReader.onload = 関数(){ 定数結果 = fileReader.result; console.log(結果) } fileReader.readAsArrayBuffer(ファイル); }、 間違い); 運用結果 Ajax リクエストデータを ArrayBuffer 形式で読み取るxhr.responseType = "arraybuffer" でレスポンスのデータ型を指定します。 onload コールバックで xhr.response を印刷する フロントエンド const xhr = 新しい XMLHttpRequest(); xhr.open("GET", "ajax", true); xhr.responseType = "配列バッファ"; xhr.onload = 関数 () { コンソールログ(xhr.response) } xhr.send(); ノード const app = new Koa(); app.use(async (ctx) => { if (パス名 = '/ajax') { ctx.body = 'こんにちは世界'; ctx.ステータス = 200; } }).listen(3000) 運用結果 TypeArray 経由で ArrayBuffer に書き込むconst typedArray1 = 新しい Int8Array(8); 型付き配列1[0] = 32; const typedArray2 = 新しい Int8Array(typedArray1); 型付き配列2[1] = 42; コンソールにログ出力します。 // 出力: Int8Array [32, 0, 0, 0, 0, 0, 0, 0] コンソールにログ出力します。 // 出力: Int8Array [32, 42, 0, 0, 0, 0, 0, 0, 0] DataView 経由で ArrayBuffer に書き込む定数バッファ = 新しいArrayBuffer(16); const view = 新しい DataView(バッファ); ビュー.setInt8(2, 42); コンソールログ(view.getInt8(2)); // 出力: 42 バッファBuffer は Node.js によって提供されるオブジェクトであり、フロントエンドでは使用できません。 一般的にはIO操作に使用されます。例えば、フロントエンドのリクエストデータを受信する場合、受信したフロントエンドデータを次のBuffer APIを通じて統合することができます。 バッファの動作以下にいくつか例を挙げます。 ノード側(Koa) const app = new Koa(); app.use(async (ctx, next) => { ctx.path === '/ajax' の場合 { const チャンク = []; 定数 req = ctx.req; req.on('データ', buf => { chunks.push(buf); }) req.on('end', () => { buffer = Buffer.concat(チャンク) とします。 コンソールログ(バッファ.toString()) }) } }); アプリを聴く(3000) フロントエンド const xhr = 新しい XMLHttpRequest(); xhr.open("POST", "ajax", true); xhr.setRequestHeader('コンテンツタイプ'、'text/plain') xhr.send("asdasdsadfsdfsadasdas"); 運用結果 ノード出力
上記は、JS のバイナリ ファミリの詳細についての簡単な説明です。JS のバイナリ ファミリの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Tomcat パイプライン モードのパイプラインとバルブの詳細な説明
>>: MacにMySQLデータベースをインストールする方法を教えます
目次1. JavaScriptの問題2. TypeScriptの利点3. TypeScriptの欠点...
プロフェッショナルな Web デザインは複雑で時間がかかります。 HTML と CSS フレームワー...
<br />このシリーズの最初のセクションでは、Web サイトのパフォーマンスを向上させ...
実行中のコンテナIDを見つける ドッカーps上記のコンテナの物理的な場所を見つける /var/lib...
目次Dockerとは展開する1. イメージをプルする2. 画像を表示する3. コンテナを実行する4....
この記事では、CSS スクロールバー セレクターを紹介し、Webkit ブラウザーと IE ブラウザ...
取引の実施REDO ログはトランザクションの永続性を保証し、UNDO ログはトランザクションのロール...
目次序文動的SQL 1. まずモジュールのディレクトリ構造を見てみましょう2. 物理モデリングと論理...
前回の記事では、ソース コードを使用してロック関連の情報をデバッグする方法を紹介しました。ここでは、...
システムバージョン [root@ ~]# cat /etc/redhat-release CentO...
1. コマンドの紹介userdel (ユーザー削除) コマンドは、ユーザー アカウントと関連ファイル...
0. 事前準備BIOS でセキュア ブートを無効にします。無効にしないと、サードパーティ ソースを...
コードをコピーコードは次のとおりです。 <本文<フォームアクション="&quo...
成果を達成するステップ1. 初期index.html最初の写真、一番上の写真を作成します。写真の i...
グラデーションの背景色を作成するときは、 linear-gradient() 関数を使用して線形グラ...