前端使用js读取文件

news/2024/7/3 1:27:37

最近同事问我js能不能读取本地文件;

想起以前看到js读取本地文件的文章,然后自己写了个demo。

ps:这有点像Java的IO流,但是又有差别。

 

首先我们定义一个input标签type="file"

1 jsReadFile:<input type="file" onchange="jsReadFiles(this.files)"/>

然后我们定义一个jsReadFiles的方法将文件作为参数;当上传文件的时候读取这个文件

 1 //js 读取文件
 2     function jsReadFiles(files) {
 3         if (files.length) {
 4             var file = files[0];
 5             var reader = new FileReader();//new一个FileReader实例
 6             if (/text+/.test(file.type)) {//判断文件类型,是不是text类型
 7                 reader.onload = function() {
 8                     $('body').append('<pre>' + this.result + '</pre>');
 9                 }
10                 reader.readAsText(file);
11             } else if(/image+/.test(file.type)) {//判断文件是不是imgage类型
12                 reader.onload = function() {
13                     $('body').append('<img src="' + this.result + '"/>');
14                 }
15                 reader.readAsDataURL(file);
16             }
17         }
18     }

这里用到了html5的FileReader这个对象来完成;

FileReader接口的方法:

readAsBinaryString                       file                                                      将文件读取为二进制编码
readAsText                                    file,[encoding]                                   将文件读取为文本,其中第二个参数是文本的编码方式,默认值为 UTF-8
readAsDataURL                                 file                                                      将文件读取为DataURL
abort                                               (none)                                                 中断读取操作(无论读取成功或失败,方法并不会返回读取结果,这一结果存储在result属性中)

相关事件:

onabort                               中断
onerror                               出错
onloadstart                        开始
onprogress                          正在读取
onload                                成功读取
onloadend                           读取完成,无论成功失败

文件一旦开始读取,无论成功或失败,实例的 result 属性都会被填充。如果读取失败,则 result 的值为 null ,否则即是读取的结果。

如果读取文件过大的话fileReader允许分段读取文件;

var blob_file;
if(file.webkitSlice) {  //chrome
        blob_file= file.webkitSlice(start, end + 1, 'text/plain;charset=UTF-8');
} else if(file.mozSlice) { //Firefox
        blob_file= file.mozSlice(start, end + 1, 'text/plain;charset=UTF-8');
}

 

成功读取文件:

 

 

 

 图片上传成功,只是图片路径变成了base64编码的形式。

顺便唠叨一下base64编码的优缺点:

优点:

1.减少了http请求。

2.没有跨域的问题。

3.直接放在路径里不需要清理缓存。

缺点:

1.IE6/7不支持(不过这个问题不大);

2.base64本质上是将图片以二进制的字母展示,字符量过大无形中增加了css/html文件的大小;

 

以上就是js读取文件的样例,有不对的地方欢迎大家吐槽!

转载于:https://www.cnblogs.com/leungUwah/p/5907005.html


http://www.niftyadmin.cn/n/2001458.html

相关文章

Power BI+Office 365开启“教学大数据”模式(世纪互联)

在去年我们曾经写过一篇名为Power BIOffice 365开启“教务管理大数据”模式&#xff08;世纪互联&#xff09;的文章&#xff0c;得到了很好的反响。但是这个方法只局限能实现在线调查而不能实现在线测试。如何实现在线测试这个功能也是我们一直在思考的。 今天在一次偶然的机会…

Redis缓存服务部署

redis缓存服务部署转载于:https://blog.51cto.com/luchunning/1857690

将textField编辑完内容作为参数发送请求

将textField编辑完内容作为参数发送请求 首先赋值默认值 其次把编辑完的内容传给model,这样的话,model里面的数据就是编辑完之后的内容了

img标签-HTML5精讲 课时ID:6.9 【表严肃】#HTML教程 #HTML5教程 #img标签

6.9 <img>标签-HTML5精讲 课时ID:6.9 【表严肃】#HTML教程 #HTML5教程 #img标签 <img>用于定义网页中的图片 <html><body><img src"http://ww2.sinaimg.cn/mw690/006aIBkCjw1f8fchbk799g306807775k.gif"></body> </html>其…

JDK8 Collectors 使用篇(四)

2019独角兽企业重金招聘Python工程师标准>>> #Collectors 使用 在之前篇章中&#xff0c;我们探讨了Lambdas、函数式接口编程、Stream的使用。现在拿collectors 耍耍. Collectors是一个reduce操作&#xff0c;通过collectors 可以把一个结合转换成另外一个集合colle…

搭建一个Tomcat,作为图片服务器,异步上传图片

1.图片服务器Tomcat的设置 tomcat/conf/web.xml中内容更改,将tomcat设置为可以读写<servlet><servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class><init-param><…

数据库sql优化经验总结

2019独角兽企业重金招聘Python工程师标准>>> 数据库sql优化经验总结 1.sql语句用索引&#xff0c;先聚集&#xff0c;后非聚集 sql语句查询中&#xff0c;能够使用聚集索引&#xff0c;就将聚集索引查询条件放最前面,然后是对应的非聚集索引 2.游标的用法 游标的快慢…

记一次失误造成的影响

在使用salt给机器添加时间同步的计划任务的时候&#xff0c;忘记salt的cron模块的写法了&#xff0c;于是偷懒直接使用echo追加到/var/spool/cron/root的方法添加了计划任务。如下&#xff1a;salt * cmd.run "echo */10 * * * /usr/sbin/ntpdate ntp1.aliyun.com > /d…