>  기사  >  웹 프론트엔드  >  H5의 FileReader는 어떻게 분산적으로 파일을 읽나요?

H5의 FileReader는 어떻게 분산적으로 파일을 읽나요?

php中世界最好的语言
php中世界最好的语言원래의
2018-03-27 14:16:581786검색

이번에는 H5의 FileReader가 어떻게 파일을 배포하고파일을 읽는지, FileReader가 파일을 배포하고 읽을 때 어떤 주의사항이 있는지 살펴보겠습니다.

Renderings

기존 규칙은 렌더링을 먼저 표시하는 것입니다

먼저 H5에서 FileReader의 일부 메서드와 이벤트를 소개합니다

FileReader 메서드

Name Function
정보( ) 읽기 종료
readAsBinaryString(file) 파일을 바이너리 인코딩으로 읽기
readAsDataURL(file) 파일을 DataURL 인코딩으로 읽기
readAsText(file, [encoding] ) 읽기 파일을 텍스트로
readAsArrayBuffer(파일) 파일을 배열 버퍼로 읽기

FileReader event

Name Function
on loadstart 읽기가 시작될 때 트리거됨
onprogress Reading
onloadend 성공이나 실패에 관계없이 읽기가 완료되면 트리거됩니다.
onload 파일 읽기가 성공적으로 완료되면 트리거됩니다.
onabort 중단되면 트리거됩니다.
onerror 오류 발생 시 트리거

code

분산 읽기 파일의 핵심 아이디어는 파일을 덩어리로 나누어 모든 M.

HTML 부분

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <form>
        <fieldset>
            <legend>分步读取文件:</legend>
            <input type="file" id="File">
            <input type="button" value="中断" id="Abort">
            <p>
                <lable>读取进度:</lable>
                <progress id="Progress" value="0" max="100"></progress>
            </p>
        </fieldset>
    </form>
    <script src="./loadFile.js"></script>
    <script>
            var progress = document.getElementById('Progress');//进度条
            var events = {
                load: function () {
                    console.log('loaded');
                },
                progress: function (percent) {
                    console.log(percent);
                    progress.value = percent;
                },
                success: function () {
                    console.log('success');
                }
            };
            var loader;
            // 选择好要上传的文件后触发onchange事件
            document.getElementById('File').onchange = function (e) {
                var file = this.files[0];
                console.log(file)
                //loadFile.js
                loader = new FileLoader(file, events);
            };
            document.getElementById('Abort').onclick = function () {
                loader.abort();
            }
        </script>
</body>
</html>

js 부분

/*
* 文件读取模块
* file  文件对象
* events 事件回掉对象 包含 success , load, progress
*/
var FileLoader = function (file, events) {
    this.reader = new FileReader();
    this.file = file;
    this.loaded = 0;
    this.total = file.size;
    //每次读取1M
    this.step = 1024 * 1024;
    this.events = events || {};
    //读取第一块
    this.readBlob(0);
    this.bindEvent();  
}
FileLoader.prototype = {
    bindEvent: function (events) {
        var _this = this,
            reader = this.reader;
        reader.onload = function (e) {
            _this.onLoad();
        };
        reader.onprogress = function (e) {
            _this.onProgress(e.loaded);
        };
        // start 、abort、error 回调暂时不加
    },
    // progress 事件回掉
    onProgress: function (loaded) {
        var percent,
            handler = this.events.progress;//进度条
        this.loaded += loaded;
        percent = (this.loaded / this.total) * 100;
        handler && handler(percent);
    },
    // 读取结束(每一次执行read结束时调用,并非整体)
    onLoad: function () {
        var handler = this.events.load;
        // 应该在这里发送读取的数据
        handler && handler(this.reader.result);
        // 如果未读取完毕继续读取
        if (this.loaded < this.total) {
            this.readBlob(this.loaded);
        } else {
            // 读取完毕
            this.loaded = this.total;
            // 如果有success回掉则执行
            this.events.success && this.events.success();
        }
    },
    // 读取文件内容
    readBlob: function (start) {
        var blob,
            file = this.file;
        // 如果支持 slice 方法,那么分步读取,不支持的话一次读取
        if (file.slice) {
            blob = file.slice(start, start + this.step);
        } else {
            blob = file;
        }
        this.reader.readAsText(blob);
    },
    // 中止读取
    abort: function () {
        var reader = this.reader;
        if(reader) {
            reader.abort();
        }
    }
}

을 읽는 것입니다. 이 기사의 사례를 읽은 후 방법을 마스터했다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!

추천 도서:

H5의 다양한 잘못된 사용법 요약

캔버스가 3D 동적 차트를 만드는 방법

위 내용은 H5의 FileReader는 어떻게 분산적으로 파일을 읽나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.