詳細は、Blob、File、FileReader、ArrayBuffer、ArrayBufferView、DataURL、URLオブジェクト
6015 ワード
ここでは、HTML 5のいくつかのオブジェクトについて詳しく説明します.Blob、File、FileReader、ArrayBuffer、ArrayBufferView、DataURL、URL
一.Blob
Blobオブジェクトは、読み取り専用の元のデータを含むクラスファイルオブジェクトです.Blobオブジェクトのデータは必ずしもJavaScriptのオリジナル形式である必要はありません.FileインタフェースはBlobに基づいて、Blobの機能を継承し、ユーザーコンピュータ上のローカルファイルを拡張してサポートします.
Blobオブジェクトはバイナリデータを格納するコンテナと見なすことができるが、中のバイナリデータを読み取るには DOMStringオブジェクトを装填Blobオブジェクト を作成する. ArrayBufferオブジェクトを埋め込むBlobオブジェクト を作成する Blob.slice()このメソッドは、元のBlobオブジェクトの指定範囲内のデータを含む新しいBlobオブジェクトを返します.このリリースにより、大きなファイルのスライスアップロード を実現できます. Canvas.toBlob()canvasがblobオブジェクト に移行 urlダウンロードファイルwindowを実現する.URLオブジェクトはBlobオブジェクトに対して1つのネットワークアドレスを生成することができて、aラベルのdownload属性を結合して、urlをクリックしてファイル をダウンロードすることができます
二.File
FileはBlobのサブクラスで、blobより主に1つのnameの属性が多い.
私たちがよく使うファイル選択ラベル要素にはfiles属性があります.このfilesがFileタイプです.
三.URL
base 64文字列をコンテンツのDataURIとして使用して、あるファイルを別のドキュメントに埋め込むことができるほか、URLオブジェクトを使用することもできます.URLオブジェクトは、FileオブジェクトまたはBlobオブジェクトへのURLを生成するために使用されます.
静的メソッド: URL.createObjectURL()このメソッドは、パラメータに与えられたオブジェクトを表すURLを含むDOMStringを作成します.このURLのライフサイクルと作成ウィンドウのdocumentバインド.この新しいURLオブジェクトは、指定されたFileオブジェクトまたはBlobオブジェクトを表します. URL.revokeObjectURL()この方法は、以前に呼び出すURLを解放するために使用される.createObjectURL()で作成された既存のURLオブジェクト.URLオブジェクトの使用を終了すると、このメソッドを呼び出すことで、ブラウザにこのファイルの参照を維持する必要がなくなったことを知らせる必要があります.
四.FileReader
Blobオブジェクトはバイナリデータのコンテナにすぎず、それ自体がバイナリを操作できないことを知っています.FileReaderオブジェクトはバイナリデータを専門に操作しています.FileReaderは主にファイルの内容をメモリに読み込むために使用され、一連の
インスタンスを作成するには
メソッド(パラメータは reader.abort()ファイル読み出し動作を終了する reader.readAsArrayBuffer(file)は非同期でファイルの内容をバイト単位で読み出し、結果はArrayBufferオブジェクトで を表す. reader.readAsBinaryString(file)は、ファイルの内容をバイト単位で非同期に読み出す、結果としてファイルのバイナリ列readerとなる.readAsDataURL(file)はファイルの内容を非同期で読み出し、結果はdata:url(すなわちBase 64形式)の文字列形式で を表す. reader.readAsText(file,encoding)は非同期に文字でファイルの内容を読み出し、結果は文字列形式で を表す.
イベント名 onabort読み出し動作が中止すると が呼び出される. onerror読み出し動作にエラーが発生すると が呼び出される. onload読み出し動作が正常に完了すると が呼び出される. onloadend読み取り操作が完了すると呼び出され、成功または失敗にかかわらず . onloadstart読み出し操作が開始する前に を呼び出す. onprogressは、データの読み出し中に を周期的に呼び出す.
実際のシーンでのいくつかの応用は、バックグラウンド を経由することなく、画像をアップロードして直接表示します.ピクチャ転送バイナリBlob ピクチャImage回転Base 64 Base 64は、 に移行する.
作者:Polaris_llhリンク:https://www.jianshu.com/p/67702e025ede出典:簡書簡書の著作権は著者の所有であり、いかなる形式の転載も著者に連絡して授権を得て出典を明記してください.
一.Blob
Blobオブジェクトは、読み取り専用の元のデータを含むクラスファイルオブジェクトです.Blobオブジェクトのデータは必ずしもJavaScriptのオリジナル形式である必要はありません.FileインタフェースはBlobに基づいて、Blobの機能を継承し、ユーザーコンピュータ上のローカルファイルを拡張してサポートします.
Blobオブジェクトはバイナリデータを格納するコンテナと見なすことができるが、中のバイナリデータを読み取るには
FileReader
が必要である.また、BlobでバイナリデータのMIMEタイプを設定することもできます./**
* Blob :
* dataArray: , Blob , Int32Array、Uint8Array、Float32Array , ArrayBuffer,ArrayBufferView, Blob, DOMString 。
* opt: , Blob ( :MIME )
**/
var blob = new Blob(dataArr:Array, opt:{type:string});
var s = 'hello'
var blobObj = new Blob([s], {type: 'text/xml'})
var abf = new ArrayBuffer(8)
var blobOjb = new Blob([abf], {type: 'text/plain'})
/**
* start: , 0
* end: ( end)
* contentType: Blob MIME ,
**/
Blob.slice(start:number, end:number, contentType:string)
function createDownload(fileName, content){
var blob = new Blob([content]);
var link = document.createElement("a");
link.download = fileName;
link.href = URL.createObjectURL(blob); // image src
link.click()
}
二.File
FileはBlobのサブクラスで、blobより主に1つのnameの属性が多い.
私たちがよく使うファイル選択ラベル要素にはfiles属性があります.このfilesがFileタイプです.
var input = document.querySelector('input[type=file]');
console.log(input.files) // FileList {0: File(3044232), length: 1}
三.URL
base 64文字列をコンテンツのDataURIとして使用して、あるファイルを別のドキュメントに埋め込むことができるほか、URLオブジェクトを使用することもできます.URLオブジェクトは、FileオブジェクトまたはBlobオブジェクトへのURLを生成するために使用されます.
静的メソッド:
var objectURL = URL.createObjectURL(blob);
blob
は、URLを作成するためのFileオブジェクトまたはBlobオブジェクトです.window.URL.revokeObjectURL(objectURL);
objectURL
は、URLが呼び出されることを示すDOMStringである.createObjectURL()メソッドによって生成されるURLオブジェクト四.FileReader
Blobオブジェクトはバイナリデータのコンテナにすぎず、それ自体がバイナリを操作できないことを知っています.FileReaderオブジェクトはバイナリデータを専門に操作しています.FileReaderは主にファイルの内容をメモリに読み込むために使用され、一連の
インタフェースを通じて、メインスレッドでローカルファイルにアクセスできます.インスタンスを作成するには
var reader = new FileReader();
メソッド(パラメータは
File
またはBlob
のオブジェクト)イベント名
実際のシーンでのいくつかの応用
var input = document.getElementById("file"); //input file
input.onchange = function(){
var file = this.files[0];
if(!!file){
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function(){
//
document.getElementById("file_img").src = reader.result //
console.log(reader.result);
}
}
}
, ArrayBuffer Blob , )
input.addEventListener('change', function() {
var file = this.files[0],
fr = new FileReader(),
blob;
fr.onload = function() {
blob = new Blob([this.result]);
var formdata = new FormData()
formdata.append('file', blob)
};
fr.readAsArrayBuffer(file)
});
function getImgToBase64(url,callback){
var canvas = document.createElement('canvas')
var ctx = canvas.getContext('2d')
var img = new Image
img.crossOrigin = 'Anonymous';
img.onload = function(){
canvas.height = img.height;
canvas.width = img.width;
ctx.drawImage(img,0,0);
var dataURL = canvas.toDataURL('image/png'); //base64
callback(dataURL);
canvas = null;
};
img.src = url;
}
Blob
、File
function base64ToBlob(base64){
var arr = base64.split(',')
var mime = arr[0].match(/:(.*?);/)[1]
var bytes = atob(arr[1]) // base64
var n = bytes.length
var u8arr = new Uint8Array(n)
while(n--){
u8arr[n]=bytes.charCodeAt(n); // Unicode
}
return new Blob([u8arr], {type: mime})
//or: return new File(u8arr], {type:mime}) //base64
// :
var formdata = new FormData()
formdata.append('file', new Blob([u8arr], {type: mime}))
xhr.send(formdata)
}
作者:Polaris_llhリンク:https://www.jianshu.com/p/67702e025ede出典:簡書簡書の著作権は著者の所有であり、いかなる形式の転載も著者に連絡して授権を得て出典を明記してください.