在如今的项目开发过程中,上传图片或者上传头像已经变成了非常常见的操作。一般的,都需要在向后台上传图片之前,在页面中预览一下用户选择的图片。上传头像只需要预览一张图片,如果是上传图片至相册功能,则需要预览用户选择的多张图片。这样的操作在h5页面中要如何实现呢?本文系统的教大家认识h5为我们提供的files类和file类,这两个类在现代项目开发中起着举足轻重的作用。
html5为文件域新增了下列两个属性:
multiple,设置文件域是否可以同时选择多个要上传的文件。这是一个没有取值的放置性属性,书写在文件域的代码中就可以使用。accept,用于在文件域对本地文件进行选择时对文件类型进行筛选。该属性取值为mime类型,以确定弹出的资源管理器只显示accept指定类型的文件。同时html还规定,在项目中使用文件域,必须为文件域设置name属性。除此之外,一个表单若具备文件传递功能,必须将表单的enctype属性设置为multipart/form-data。
例如:想让用户通过文件域从本地资源管理器中选择多个图片,html代码如下所示。
<form method="get" action="uploadavatar" enctype="multipart/form-data"> <input type="file" class="tx" name="file" multiple accept="image/jpeg" /></form>123
我们还要知道,无论使用javascript的dom操作,还是jquery的相关方法,都无法利用表单元素的value属性获得用户选择的文件地址。value属性只能得到一个包含文件全名的虚拟地址:
c:\fakepath\文件全名
我们可以从本地的c盘去进行查找,fakepath路径根本不存在。那么我们要怎样才能在页面中显示用户选择的图片呢?这就要用到files类和file类了。
使用files类必须先创建files类的实例,创建格式如下所示。
var 实例名 = 文件域.files;
var files=document.querylector(".tx").files; //变量files就是files类的实例名alert(files); //[object filelist]
使用file类必须先创建file类的实例,创建格式如下所示。
var 实例名 = files类的实例.item(index);
var file=document.querylector(".tx").files.item(0); //变量file就是file类的实例名alert(file); //[object file]
(1)这两类地址都可以在本页面内作为文件的有效地址,在其他页面无法使用。
(2)前端技术产生的这两类地址都无法在后台使用。
var blobaddress = window.url.createobjecturl(file实例 | blob实例)
例:页面中有一个文件域,同时还有一个用来预览图片的容器,html代码如下所示。
<input type="file"营养减肥餐单 name="file" /> <div class="imgcontainer"></div>12
原生javascript代码如下所示。
var filenode=document.querylector("input[type=file]");var imgcontainer=document.querylector(".imgcontainer");filenode.onchange=function(){var file=this.files.item(0);var img=new image();img.src=url.createobjecturl(file);img.width=60;img.height=60;imgcontainer.appendchild(img);}
filereader类可以读取到file类实例所指代的文件的内容。要想获得用户所选文件的ba64地址必须使用filereader类。
var fr=new filereader();
例1:读取文件(图片)并得到该文件的ba64地址。
$(".file").addeventlistener("input",function(){var file=this.files.item(0);var fr=new filereader();fr.readasdataurl(file);fr.onload=function(){$(".tp").src=this.result;}})
例2:为文件的读取设置一个进度条。
<progress max="进度条的最大值" value="当前的读取进度"></progress>1
$(".file").addeventlistener("input",function(){var file=this.files.item(0);var fr=new filereader();fr.readasbinarystring(file);fr.onloadstart=function(){ //当开始读取文件时$(".pro").style.di形容一个人splay="block";}fr.onprogress=function(){ 全日制高中 //读取文件过程中var temp=(event.loaded/file.size)*100;$("progress").value=temp;$("progress+span").textcontent=parint(temp*10)/10 + "%";}fr.onload=function(){ //读取结束时window.ttimeout(function(){$(".pro").style.display="none";},2000);}})
实现一个新文件的创建,该类是file类的父类。
var blob=new blob(array,{ type:“mime类型” })
参数:array,数组,该数组用来指定创建文件的内容。
例1:创建一个文本文件并另存为指定的本地路径。
$(".btn").addeventlistener("click",function(){var txt=$(".txt").value;var array=new array();array.push(txt);var blob=new blob(array,{type:"text/plain"});var url=url.createobjecturl(blob);var anode=document.createelement("a");anode.href=url;anode.download="";anode.click();})
例2:实现在线的html代码执行功能。
$(".btn").addeventlistener("click",function(){var codecontent=$(".code").textcontent;var array=new array(codecontent.replace(/\s+\</g,'\<').replace(/\>\s+/g,'\>'));var blob=new blob(array,{type:"text/html"});var fr=new filereader();fr.readastext(blob,'gb2312');fr.onload=function(){console.log(this.result);}var url=url.createobjecturl(blob);$(".iframe").src=url;})
在html5的页面操作过程中,很多地方都可以用到files类、file类、bolb类。h5提供的这些类可以简化我们对文件的操作,结合后台功能,可以开发出多种多样的文件功能。
小海前端,具有18年web项目开发和前后台培训经验,在前端领域著有较为系统的培训教材,对vue.js、微信小程序开发、uniapp、react等全栈开发领域都有较为深的造诣。入住今日头条,希望能够更多的结识web开发领域的同仁,将web开发大力的进行普及。同时也愿意与大家进行深入的技术研讨和商业合作。
本文发布于:2023-04-05 09:59:45,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/58d88902badc72f72f829306a18f5b72.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:file是什么文件格式(file格式转换方式).doc
本文 PDF 下载地址:file是什么文件格式(file格式转换方式).pdf
留言与评论(共有 0 条评论) |