フロントエンドで使用されるバイナリ

実際、フロントエンドにはバイナリ ストリームの概念が含まれることがよくあります.blob、arrayBuffer、fileList、file、base64 について聞いたことはあっても、慎重に考えたことがない場合でも、ファイルのアップロードとダウンロード、画像のアップロードと表示についてよく考えてください。 .違い。これらは何で、どのように使用されますか?

1.ブロブ、ファイルリスト、ファイル

ファイルアップロードは一般的なフロントエンド機能です. 機能を実行する前に, いくつかの概念を理解する必要があります.

ブロブ

Blob に関する MDN の説明 -  Blob - Web API Interface Reference | MDN

Blob is a file-like object, not the native data format of JavaScript. 名前は SQL データベースに由来し、バイナリ ラージ オブジェクトを表します。フロント エンドのBLOB は、バッキング ファイル専用のバイナリ オブジェクトです (変更ではなく読み取りを使用し、データは不変です)。

ファイルリスト

MDN による FileList の説明 - FileList - Web API | MDN

FileList は、入力ボックスを使用してアップロードされたファイルを選択し、ファイル リストを返します。

ファイル

MDN のファイルの説明 -  https://developer.mozilla.org/en-US/docs/Web/API/File

ファイル オブジェクトは、FileList 内のファイル オブジェクトです。

file は blob を継承し、ユーザー システムをサポートするために拡張されたファイルです ( File オブジェクトは特殊なタイプの blob です)。

ドキュメントを選択

ネイティブ アップロード ファイルの使用方法を覚えていますか? アップロードされたファイルの形式は何ですか?

最初に出力を印刷して、ファイルがどのように見えるかを確認します

<body>
    <div id="test">
        <input type="file" id="file">
    </div>
    <script>
        let fileDom = document.getElementById('file');
        fileDom.addEventListener('change', function(e) {
           console.log(fileDom.files)
           console.log(fileDom.files[0].arrayBuffer())
        })
    </script>
</body>

出力を見てください


印刷物は以前の概念を検証します

入力で取得したデータは FileList ファイルオブジェクトで、各ファイルオブジェクト File はその中にあり、ファイルを見るには arrayBuffer() を使って見る                   

ファイルがアップロードされたら、画像のアップロード エコーによる相互変換を見てみましょう。

    <input type="file" id="file">
    <div id="imgbox"></div>
    <script>  
        document.getElementById('file').onchange = function(e) {
            document.getElementById('imgbox').innerHTML = `<img src=${URL.createObjectURL(e.target.files[0])}>`       
        }
    </script>

   コンソールを開いて見てください

                                                                                                                                                                                                    取得したファイルオブジェクトを画像で表示したい場合は URL.createObjectURL(blob) を使って img タグで解析できるアドレスに変換するとアドレス blob:// src の先頭が見えますblob だけでなく base64 も解析できますが、                                                                                                     base64 とは何ですか?

 base64                    

 Base64 - MDN Web Docs 用語集: Web 関連用語の定義 | MDN

 

 src は base64 を解析できます。一般的なのは blob から base64、base64 から blob です。

    <input type="file" id="file">
    <div id="imgbox"></div>
    <script>  
        //blob转base64
        function blobToDataURL(blob) {
            return new Promise((reslove, reject)=> {
                var reader = new FileReader();
                reader.readAsDataURL(blob); // 读取文件
                reader.onload = function (e) {
                    reslove(e.target.result)
                }
            })
            
        }

        document.getElementById('file').onchange = function(e) {
            blobToDataURL(e.target.files[0]).then(res => {
                document.getElementById('imgbox').innerHTML = `<img src=${res}>`
            })
            
        }
    </script>

base64 へのブロブ

function dataURLtoBlob(dataurl) {
    var arr = dataurl.split(','),
        mime = arr[0].match(/:(.*?);/)[1],
        bstr = atob(arr[1]),
        n = bstr.length,
        u8arr = new Uint8Array(n);

    while (n--) {
        u8arr[n] = bstr.charCodeAt(n);
    }
    return new Blob([u8arr], { type: mime });
}

ブロブ データは file.fileList を介して取得できます.ブロブ データは大量のバイナリ データを格納できる js のオブジェクト型です.ここではブロブのプロパティとメソッドについては紹介しません. もっと知りたい場合は, mdnで確認してください

慎重な学生は、上記の変換で fileReader 関数が使用されていることに気付くかもしれません. FileReader は、コンピューターに保存されているファイルを非同期に読み取ることができます. mdn も非常に詳細であるため、ここでは紹介しません. 興味がある場合は、それを読んでください.自分で。

画像エコーに加えて、ブロブはファイルをダウンロードすることもできます

let blob = new Blob(['我是文件'])
let url = URL.createObjectURL(blob);
let a = document.createElement("a");
a.download = '文件.text';
a.href = url;
document.body.appendChild(a);
a.click();
a.remove();

上記の知識ポイントを写真でまとめてみましょう

おすすめ

転載: blog.csdn.net/qq_42625428/article/details/123185568