html5文件读取+按钮样式重置+文件内容预览
FileReader读取文件详细介绍请访问:http://www.cnblogs.com/xyyt/p/9066882.html
FileReader提供了如下方法:
readAsArrayBuffer(file) | 按字节读取文件内容,结果用ArrayBuffer对象表示 |
readAsBinaryString(file) | 按字节读取文件内容,结果为文件的二进制串 |
readAsDataURL(file) | 读取文件内容,结果用data:url的字符串形式表示 |
readAsText(file,encoding) | 按字符读取文件内容,结果用字符串形式表示 |
abort() | 终止文件读取操作 |
readAsDataURL和readAsText较为常用,这里以这两个为例,说明具体使用方法:
1.readAsDataURL:readAsDataURL会将文件内容进行base64编码后输出。
由于媒体文件的src属性,可以通过采用网络地址或base64的方式显示,因此我们可以利用readAsDataURL实现对图片的预览。
2.readAsText:导入文档格式文件,默认按Utf-8格式读取,其他格式需要设置编码格式:
readAsText(file,encoding)可按指定编码方式读取文件,但读取文件的单位是字符,故对于文本文件,只要按规定的编码方式读取即可;而对于媒体文件(图片、音频、视频),其内部组成并不是按字符排列,故采用readAsText读取,会产生乱码,因此不是最理想的读取文件的方式。
示例代码如下:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <style> .btn-info { cursor: pointer; width: 88px; height: 36px; line-height: 36px; color: #fff; background-color: #5bc0de; border-color: #46b8da; border: 1px solid transparent; border-radius: 4px; } </style> <title></title> </head> <body> <div id="app"> <div class="fileBtn"> <form id="uploadForm" action="" method="post" enctype="multipart/form-data"> <input type="file" name="uploadFile" id="uploadFile" @change="readFile" style="visibility:hidden;position:absolute;top:0px;width:0px" /> <!--隐藏默认标签样式--> </form> <input type="button" class="btn btn-info" value="导入文档" @click="clickUploadBtn" /> 支持.txt .doc .xls .cvs等文件格式 </div> <article> <h4>上传文档预览</h4> <ul style="list-style: none;"> <li v-for="i in fileData">{{i}}</li> </ul> <h4>上传图片预览</h4> <div><img :src="imgData"></div> </article> </div> </body> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> Vue.config.silent = false; Vue.config.devtools = true; var app = new Vue({ el: '#app', data: { fileData: [], imgData:"" }, created: function() {}, mounted: function() {}, methods: { /** * 上传按钮单击事件 */ clickUploadBtn: function() { //触发file的点击事件 document.getElementById("uploadFile").click() }, readFile: function() { var inputBox = document.getElementById("uploadFile"); var fileName=inputBox.value; var fileType; var regImg=/(?:jpg|gif|png|jpeg)$/; var reader = new FileReader(); var self=this; //发起异步请求 if(regImg.test(fileName)){ //图片格式文件 reader.readAsDataURL(inputBox.files[0]); reader.onload = function() { self.imgData=this.result console.log(this.result) } }else{ //其他文档 格式(utf-8编码格式) reader.readAsText(inputBox.files[0], "utf-8"); reader.onload = function() { //读取完成后,数据保存在对象的result属性中 self.fileData = this.result.split("\n") console.log(this.result) } } } } }) </script> </html>
个人原创博客,转载请注明来源地址:https://www.cnblogs.com/xyyt
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通