如何获取input框type=file选中的文件对象(FileReader)

最近突发奇想想做一个现在常用的图像上传然后从中截取头像保存的案例,所以做了一些准备工作,比如input框选择文件触发的哪些事件,这一节就保存一下我们如何获取input的type=file的input框的文件数据。

如果想获取通过input选择的文件的数据,我们就需要使用到js封装好的FileReader对象。

获取对象:

首先我们需要通过FileReader构造函数实例化对象。

var reader = new FileReader();

然后通过调用

FileReader.readAsDataURL()指定获取的数据对象(获取input的比如:input.files[0]),并且在数据读取完成后触发FileReader.onload事件,我们可以给onload赋值一个function来获取获得的相关数据。如:

FileReader.οnlοad=function (oFREvent) {
  console.log(oFREvent.target.result);
};

你就会发现打印出来的全是文件转化成的base64格式文件数据,前面有一个文件格式开头的代码,比如图片格式的都会带一个data:image/ ,来表示是图片数据,如果需要判断是否是图片类型的数据,我们就需要获取文件的类型使用。

ps:如果在input上面加一个multiple属性,输入框就可以选择多个文件。兼容性:html5,ie10+。

首先获取到文件对象,可以通过:input.files来获取到文件对象组,但是我们现在貌似只能选择一项文件,所以通过input.files[0]就获取到了文件的对象。文件对象里面包括文件大小(size),文件的名字(name)和文件类型(type)。如果上传的是一张jpg的图形,那它的type就是image/jpeg

所以,我们可以通过使用正则判断type的值来获取是否上传的是图片来处理。如果需要规定使用的图片类型,可以使用下面的这条正则:

/^(?:image\/bmp|image\/cis\-cod|image\/gif|image\/ief|image\/jpeg|image\/jpeg|image\/jpeg|image\/pipeg|image\/png|image\/svg\+xml|image\/tiff|image\/x\-cmu\-raster|image\/x\-cmx|image\/x\-icon|image\/x\-portable\-anymap|image\/x\-portable\-bitmap|image\/x\-portable\-graymap|image\/x\-portable\-pixmap|image\/x\-rgb|image\/x\-xbitmap|image\/x\-xpixmap|image\/x\-xwindowdump)$/i
如果没有要求,只要是图片就行的话就用下面:

/image\/\w+/
来进行判断一下即可

/image\/\w+/.test(file.type)//如果是图片的话就返回true

下面附上mdn介绍的相关方法:

事件处理程序

FileReader.onabort
abort事件的处理程序。每次读取操作中止时触发此事件。
FileReader.onerror
error事件的处理程序。每次读取操作遇到错误时触发此事件。
FileReader.onload
load事件的处理程序。每次读取操作成功完成时触发此事件。
FileReader.onloadstart
loadstart事件的处理程序。每次阅读开始时触发此事件。
FileReader.onloadend
loadend事件的处理程序。每次阅读操作完成(成功或失败)时触发此事件。
FileReader.onprogress
progress事件的处理程序。阅读 Blob内容时触发此事件。
FileReader.abort()
中止读操作。回来后, readyState会是 DONE
FileReader.readAsArrayBuffer()
开始读取指定的内容 Blob,一旦完成,该 result属性包含一个 ArrayBuffer表示该文件的数据。
FileReader.readAsBinaryString() 
开始读取指定的内容 Blob,一旦完成,该 result属性将以文本形式包含原始二进制数据作为字符串。
FileReader.readAsDataURL()
开始阅读指定的内容 Blob,一旦完成,该 result属性包含 data:表示文件数据的URL。
FileReader.readAsText()
开始读取指定的内容 Blob,一旦完成,该 result属性将文件的内容作为文本字符串包含。







  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答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`对象来实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值