位置: 编程技术 - 正文

JavaScript File API文件上传预览

编辑:rootadmin

推荐整理分享JavaScript File API文件上传预览,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

  对于基于浏览器的应用而言,访问本地文件都是一件头疼的事情,通常我们能做的仅仅是使用<input type="file">标签来上传文件。实现过程是:选取文件的时候value 属性保存了用户指定的文件的名称,表单被提交的时候,浏览器会向服务器发送选中的文件的内容而不仅仅是发送文件名。再获取服务器返回的地址,然后做预览。

  但是如果有一天我们要上传一个图片,传了图片后预览想换另一张图片,就又得先上传到服务器再预览。在网络比较慢的情况下,这样真的很折腾。

  所以我们某些时候需要先预览再上传到服务器,特别是一些有剪切功能的需求,例如新浪微博的头像更换。但是目前能做的只能是借助插件开发或者使用flash,由于不同浏览器的技术实现不尽相同,为了让程序能够支持多浏览器,我们的程序就会变得十分复杂而难于维护。幸好现在有了File API。

  通过监听change事件我们可得知用户选择的文件,并且添加了一个files集合,集合中将包含file对象,每个file对象对应着一个文件。并且都有以下只读属性name,size,type,lastModifiedDate.

以<input type="file" name="file">为例,监控onchange事打印它的file对象:

  

  由此我们可得知用户选取的文件格式,文件名以及文件大小等等的一些信息。因此我们很容易就能为所选取的文件作验证判断是否符合我们定的一些要求。

除此之外File API还提供了FileReader类型读取文件中的数据。

FileReader类型实现的事一种异步文件读取机制,类似于XMLHttpRequest,但是它读的是文件系统而不是远程服务器。并且提供了几种读取方法:

readAsText(file,encoding):以纯文本形式读取文件,将读取到的文本保存在result属性中,第二个参数用于指定编码类型,可选。 readAsDataURL(file):读取文件以数据URL的形式保存在result属性中。 readAsBinaryString(file):读取文件并将一个字符串保存在result属性中。 readAsArrayBuffer(file):读取文件并将一个包含文件人容的ArrayBuffer保存在result属性中JavaScript File API文件上传预览

通过以上方法分别读取同一张本地图片,并且把保存在result属性中的信息打印出来对比如下:

readAsText(file,encoding):

readAsDataURL(file):

  通过以上对比我们发现这些读取文件的方法为灵活的处理文件数据提供了极大的方便。例如读取图像文件并且保存为数据url,可以做上传前的预览功能。

  由于读取的过程是异步的,所以FileReader里面有几个事件分别处理不同的情况:progress(是否读取了新数据)、erro(是否发生了错误)、load(是否已经读完了整个文件)。

  由于种种原因无法读取文件就会触发error事件,触发error事件的时会有一个属性code(错误码)保存在FileReader的error属性里面的一个对象中。

使用FileReader做上传预览的例子:

HTML:

JavaScript:

效果以及返回的图片URL:

标签: JavaScript File API文件上传预览

本文链接地址:https://www.jiuchutong.com/biancheng/381711.html 转载请保留说明!

上一篇:javascript绘制漂亮的心型线效果完整实例(javascript如何绘制曲线)

下一篇:详解Webwork中Action 调用的方法(activate webstorm)

  • 股东继续投资
  • 普通发票税额没有打印全可以用么
  • 环保税申报表怎么填制
  • 招聘服务合同印花税
  • 企业缴纳残疾人保证金按什么标准缴纳
  • 滴滴代叫乘客有没有事
  • 计算并分摊本月利润
  • 收到费用发票入账后发现错误
  • 在建工程转固定资产的条件
  • 付给私人股权转让权怎么做分录?
  • 车间报废产品改善方式
  • 大型设备间距应至少大于几米
  • 企业住房维修基金怎么交
  • 已经在网上申报学校可以改学校吗
  • 迁移税务需要带什么资料
  • 国税定额发票有效期是多长时间
  • 收到普通发票税号错了不改会怎么样
  • 利润表资产处置损益怎么填
  • 留抵进项税额可以挂在转出未交增值税吗
  • 资产计税基础是怎么填
  • 公司账上的钱可以转给法人账上吗
  • 什么发票可以抵成本
  • 个人缴付年金的扣除限额
  • 免税收入与不征税收入的区别与联系
  • 打包贷款和出口信贷的区别和联系
  • 工信部推出一键解绑怎么用
  • 华为鸿蒙怎么打开5g
  • win10待机久了自动关机
  • 企业开发产品转为自用的,不得在税前扣除折旧费用
  • php oci_connect
  • win10 待机时间
  • echarts获取不到宽和高
  • 与取得收入无关的其他支出
  • 银行提取现金会查征信吗
  • 金蝶怎么加人
  • 利润表管理费用包括哪些内容
  • 车辆过完户保险还能下浮吗
  • 发票没有填写开户行,可以报销吗
  • 现代服务业主要功能
  • python __call__
  • mongodb 入门
  • sql获取第一条记录的内容
  • 善意取得虚开发票罪认定
  • mysql 执行过程
  • 应付职工薪酬借方表示什么
  • 未开票收入申报有税务风险吗
  • 财税人员岗位职责
  • 还借款收据怎么写
  • 购买员工团体意外险需要缴纳个税么
  • 低值易耗品摊销借贷方向
  • 应收账款入账价值包括现金折扣吗
  • 买材料含税价怎么算
  • 保险增值税发票是什么
  • 主营业务收入需要减去增值税吗
  • sql server的mdf文件怎么导入数据库
  • 微软数据收集
  • Windows Server 2003服务器群集创建和配置指南
  • vmwares
  • commserver什么意思
  • centos配置http
  • windowsaudio服务不存在或已删除
  • win7怎么看最近访问位置
  • bootstrap框架怎么用
  • three.js gui
  • 简单谈谈对中国电信的认识
  • 深入理解新发展理念,推进供给侧结构性改革心得体会
  • linux安装unixodbc
  • 用jQuery实现优酷首页轮播图
  • Linux 中的cat命令
  • unity3d物体移动代码
  • 防止shell脚本重复执行
  • jquery滚动条滚动到指定位置
  • 教你学python
  • 增值税一般纳税人和小规模纳税人的区别
  • 耕地建仓库属于违规
  • 河南林州在哪三省交界处
  • 伙食补助和伙食费
  • 服务合同需要交个人所得税嘛
  • 税控服务费抵扣填哪
  • 1000元钱0.05%的利息是多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设