File​Reader(文件上传)的基本使用

FileReader简介

FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。

FileReader是一种异步文件读取机制,结合input:file可以很方便的读取本地文件。

input:file

<input type="file" id="inputBox">

input的file类型会渲染为一个按钮和一段文字。点击按钮可打开文件选择窗口,文字表示对文件的描述(大部分情况下为文件名);file类型的input会有files属性,保存着文件的相关信息。

获取file类型的input元素,然后.files即可打印
在这里插入图片描述
input.files简单介绍:

  • input.files是一个数组,由传入的file对象组成。每个file对象包含以下属性:

  • lastModified:数值,表示最近一次修改时间的毫秒数;

  • lastModifiedDate:对象,表示最后一次表示最近一次修改时间的Date对象(高程中说是字符串,根据上图可看出应该为对象,为了层级清晰未对其展开,大家可自行查看,其可调用Date对象的有关方法,例如getDay方法);

  • name:本地文件系统中的文件名;

  • size:文件的字节大小;

  • type:字符串,文件的MIME类型;

  • weblitRelativePath:此处为空;当在input上加上webkitdirectory属性时,用户可选择文件夹,此时weblitRelativePath表示文件夹中文件的相对路径。比如:

<input type="file" #fileUpload webkitdirectory>

在这里插入图片描述

FileReader

以上file对象只获取到了对文件的描述信息,但没有获得文件中的数据,而inputBox.value也只是保存的是文件的绝对路径。我们可以通过html5提供的FileReader读取到文件中的数据。

创建实例:
var reader = new FileReader();

方法:

方法定义描述
abort():void终止文件读取操作
readAsArrayBuffer(file):void异步按字节读取文件内容,结果用ArrayBuffer对象表示
readAsBinaryString(file):void异步按字节读取文件内容,结果为文件的二进制串
readAsDataURL(file):void异步读取文件内容,结果用data:url的字符串形式表示
readAsText(file,encoding):void异步按字符读取文件内容,结果用字符串形式表示

事件:

事件名称描述
onabort当读取操作被中止时调用
onerror当读取操作发生错误时调用
onload当读取操作成功完成时调用
onloadend当读取操作完成时调用,不管是成功还是失败
onloadstart当读取操作将要开始之前调用
onprogress在读取数据过程中周期性调用

angular代码示范

1. readAsDataURL(图片预览)
<input type="file" #fileUpload webkitdirectory>
<button (click)="fileUploadHandle()">读取图像</button>

<div #showImg>
    <img src="{{imgUrl}}" alt="" width="400" height="400">
</div>
	@ViewChild('fileUpload') fileUpload: any;
    @ViewChild('showImg') showImg: any;

    imgUrl: any;

    fileUploadHandle() {
        const file = this.fileUpload.nativeElement; // 获取元素

        console.log(file.files);

        const fileInfo = file.files[0]; // 获取元素信息

        if (!/image\/\w+/.test(fileInfo.type)) {
            alert('看清楚,这个需要图片!');
            return false;
        }

        const filereader = new FileReader();
        // 将文件以Data URL形式读入页面
        filereader.readAsDataURL(fileInfo);

        const that = this;

        filereader.onload = function() {
            console.log(this.result);
            that.imgUrl = this.result;
        };

        console.log(filereader.LOADING);

        filereader.onloadend = () => {
            console.log('文件读取完成');
        };
    }

由于媒体文件的src属性,可以通过采用网络地址或base64的方式显示,因此我们可以利用readAsDataURL实现对图片的预览。
在这里插入图片描述

2. readAsBinaryString
<input type="file" #fileUpload>
<button (click)="readAsBinaryString()">读取文二进制数据</button>

<div>{{content}}</div>
	@ViewChild('fileUpload') fileUpload: any;
    content: any;
    
	readAsBinaryString() {
        const file = this.fileUpload.nativeElement; // 获取元素
        const fileInfo = file.files[0]; // 获取元素信息

        const filereader = new FileReader();

        // 将文件以二进制形式读入页面
        filereader.readAsBinaryString(fileInfo);

        const that = this;

        filereader.onload = function() {
            console.log(this.result);
            that.content = this.result;
        };
    }
3. readAsText
<input type="file" #fileUpload>
<button (click)="readAsBinaryString()">按字符读取文件内容</button>

<div>{{content}}</div>
	readAsBinaryString() {
        const file = this.fileUpload.nativeElement; // 获取元素
        const fileInfo = file.files[0]; // 获取元素信息

        const filereader = new FileReader();

        // 异步按字符读取文件内容
        filereader.readAsText(fileInfo, 'gbk'); // "utf-8"

        const that = this;

        filereader.onload = function() {
            console.log(this.result);
            that.content = this.result;
        };
    }
4. readAsArrayBuffer
<input type="file" #fileUpload>
<button (click)="fileUploadHandle()">按字符读取文件内容</button>

<div>{{content}}</div>
	@ViewChild('fileUpload') fileUpload: any;
    content: any;

    fileUploadHandle() {
        const file = this.fileUpload.nativeElement; // 获取元素
        const fileInfo = file.files[0]; // 获取元素信息

        const filereader = new FileReader();

        // 二进制传输
        filereader.readAsArrayBuffer(fileInfo); 

        const that = this;

        filereader.onload = function() {
            console.log(this.result);
            that.content = this.result;
            // 调用ajax方法,将二进制流传递到后台
            this.ajax(this.result);
        };
    }
5. 上传图片案例
<input type="file" id="test" #fileUpload name="fileContent">
	ngAfterViewInit(): void {
        this.fileUploadHandle();
    }

    fileUploadHandle() {
        this.fileUpload.nativeElement.onchange = function() {

            const filereader = new FileReader();
            const fileType = this.files[0].type; // 获取文件类型
            filereader.readAsDataURL(this.files[0]); // 将文件以Data URL形式读入页面

            // 文件读取成功完成时触发
            filereader.onload = function() {

                if (/^image\[jpeg|jpg|png|gif]/.test(fileType)) {

                    // 无论读取成功或失败,结果存储在result属性中
                    let data = (this.result).toString();

                    // 将得到的结果分割获取base64字符串
                    data = data.split(',')[1];

                    console.log(data);

                }
            };
        };
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 由于安全性考虑,浏览器不允许通过JavaScript获取input type=file文件内容。因此,你需要使用其他方法来获取该文件内容。 一种可行的方法是使用HTML5的File API。以下是一个使用jQuery和File API获取文件内容的示例: HTML代码: ``` <input type="file" id="fileInput"> <button id="btn">获取文件内容</button> <div id="fileContent"></div> ``` JavaScript代码: ``` $(function() { $('#btn').click(function() { var file = $('#fileInput')[0].files[0]; if (file) { var reader = new FileReader(); reader.onload = function(e) { $('#fileContent').text(e.target.result); }; reader.readAsText(file); } else { $('#fileContent').text('请选择文件'); } }); }); ``` 这段代码首先获取了input type=file元素的文件对象,然后使用FileReader对象读取文件内容,并将其显示在页面上。请注意,由于安全性限制,该代码只能在本地运行,无法在某些环境中使用。 ### 回答2: 使用Bootstrap无法直接获取input type=file文件内容,因为Bootstrap是一个前端框架,主要用于构建页面结构和样式。而获取input type=file文件内容需要使用JavaScript来实现。 要获取input type=file文件内容,可以使用以下步骤: 1. 通过JavaScript获取input元素,可以使用document.getElementById或者document.querySelector来获取指定的input元素。 2. 给input元素添加change事件监听器,当用户选择了文件后会触发change事件。 3. 在change事件的处理函数中,可以通过event.target.files[0]来获取选择的文件。event.target是事件的目标元素,files属性是一个文件列表,[0]表示获取选中的第一个文件。 4. 可以使用FileReader对象来读取文件内容,通过FileReader.onload事件监听文件内容的读取完成。 5. 在FileReader.onload事件的处理函数中,可以通过event.target.result来获取文件内容,result是一个字符串表示文件的内容。 具体代码如下: ```html <input type="file" id="myFile"> <script> document.getElementById('myFile').addEventListener('change', function(event) { var file = event.target.files[0]; var reader = new FileReader(); reader.onload = function(event) { var content = event.target.result; console.log(content); }; reader.readAsText(file); // 以文本形式读取文件内容 }); </script> ``` 以上代码是一个简单示例,当用户选择了文件后,会将文件内容输出到控制台中。实际应用中,可以根据需要将内容显示到页面中或进行其他处理。 ### 回答3: 要使用Bootstrap获取`<input type="file">`的文件内容,可以通过以下步骤来实现: 1. 在HTML中定义一个`<input>`元素,并设置`type="file"`属性。这将创建一个文件上传按钮,用于选择要上传的文件。 ```html <input type="file" id="fileUpload"> ``` 2. 在JavaScript中,找到这个`<input>`元素,并添加一个`change`事件监听器,以便在选择文件后触发相应的操作。 ```javascript $(document).ready(function() { $("#fileUpload").change(function() { var file = this.files[0]; // 获取选择的文件 var reader = new FileReader(); reader.onload = function(e) { var fileContent = e.target.result; // 获取文件内容 // 这里可以对文件内容进行处理或展示 }; reader.readAsText(file); // 以文本形式读取文件内容 }); }); ``` 3. 在`change`事件监听器中创建一个`FileReader`对象,并为其设置一个`onload`事件。当文件加载完成后,`onload`事件将被触发。 4. 在`onload`事件中,可以通过`e.target.result`来获取文件的内容。根据需求,可以对文件内容进行进一步的处理或展示。 需要注意的是,使用Bootstrap只是用来美化或优化页面样式和布局。要获取文件内容,仍然需要使用JavaScript中的`FileReader`对象来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值