位置: 编程技术 - 正文

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)

  • 哪些税不用通过应交税费
  • 企业转出多交增值税吗
  • 出口货物备案单证目录在哪里
  • 进口原料免税
  • 本年利润和利润分配未分配利润的区别
  • 一张报关单可以分两次退税吗
  • 投资收益收到的现金小于投资收益
  • 企业亏损结转年限举例说明
  • 汽车装饰属于什么服务
  • 小微企业的企业所得税税收优惠政策
  • 非同一控制下的企业合并采用成本法
  • 利息股息红利所得
  • 租入的固定资产属于资产吗
  • 所得减免优惠明细表减免项目包括几项
  • 参展补助
  • 计提长期借款利息会计分录
  • 公司将自有车辆对外出租
  • 残保金次年申报
  • 预付款和进度款支付有冲突吗
  • 企业所得税法的主要内容
  • 样品寄送时运费支付的对策
  • win11系统优化教程
  • 员工报销差旅费并归还借款会计分录
  • linux GTK、KDE、Gnome、XWindows 图形界面区别介绍
  • win8快捷键大全
  • phpcms手册
  • 汽车费用怎么做账
  • 上季度成本多结转了怎么调
  • 显卡的散热
  • 为什么linux这么受欢迎
  • 增值税有哪些类型的税种
  • 动产租赁增值税税率最新
  • 企业内部转账通知单
  • php实现快速排序算法
  • 微信小程序详细教程
  • vue怎么用bootstrap
  • spring integration使用:消息转换器
  • 学习笔记:深度学习(2)——BP神经网络
  • 无标题节啥意思
  • 预缴增值税需要预缴城建税吗
  • phpcms使用教程
  • 上级拔入资金
  • python smtpd
  • 丢失增值税发票怎么办
  • mysql数据库sid
  • 税金及附加如何计算公式
  • 国有独资企业董事会成员组成规定
  • 只有进项税额没有销项税额怎么结转
  • 发票金额与付款金额不一致情况说明
  • 不需要计提折旧的情况
  • 固定资产是每月折旧吗
  • 人们对餐饮业的要求
  • 空调安装开发票
  • 软件行业成本如何归集
  • 年报和汇算清缴的顺序
  • 一分钟教你
  • UNIX系统中文件的索引表结构
  • 如何关掉数据
  • win制作mac启动
  • 文件在移动或复制过程中权限的变化
  • centos怎么样
  • Win10 64位系统下火狐浏览器打开带flash网页卡死的解决方法
  • grep的结果 再次查找
  • 在对linux系统中dir
  • win10自动更新win11怎么办
  • centos安装c编译器
  • Nodejs+express+html5 实现拖拽上传
  • nodejs require 路径查找
  • 变量赋值的含义
  • diskpart ntfs
  • js跳出if语句
  • python程序设计的方法
  • 安卓绘制图表
  • unity引擎工具
  • javascript可以做动态网页吗
  • androidstudio webview
  • flask框架代码
  • 国家税务总局,河北省税务局
  • 车辆购置税计入固定资产一起折旧吗
  • 房产增值税和土地增值税的区别案例
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设