html5文件夹上传,html中上传文件

  html5文件夹上传,html中上传文件

  长期以来,开发者一直被这个问题所困扰,大部分都采用了flash作为解决这个问题的方案。但是,flash并不是万能的。因为有了flash版本,割据政权带来的问题有时会变成噩梦。有些网站使用form标签的enctype=multipart/form-data属性,但是这个属性需要服务器进行特殊设置来显示进度,而且也比较复杂。复杂意味着容易出错,这不是我们想要的。

  现在让我们看看Html5为什么能解决这个问题,以及它能做得有多好。

  用HTML5上传文件

  在HTML5标准中,XMLHttpRequest对象被重新定义为“XMLHttpRequest Level 2”,它包含以下五个新特性:

  1.支持上传和下载字节流,如文件,blob和表单数据。

  2.增加了上传和下载的进度事件。

  3.支持跨域请求

  4.允许发送匿名请求(即不发送HTTP的Referer部分)

  5.允许设置请求的超时时间。

  在本教程中,我们主要关注第一个和第二个特性,尤其是第二个,——,它可以提供我们想要的上传进度。与之前的方案不同,这个方案不需要服务器做特殊设置,可以边看教程边尝试。

  上面的插图是我们可以实现的:

  1.显示上传的文件信息,如文件名、类型和大小。

  2.可以显示真实进度的进度条。

  3.上传速度

  4.剩余时间的估计

  5.上传的数据量

  6.上传后服务器返回的响应。

  另外,使用XMLHttpRequest,我们的上传过程都是异步的,因此用户在上传文件时仍然可以操作网页中的其他元素,而无需等待上传完成。上传完成后,我们可以得到服务器的响应,所以整个上传过程是相当符合逻辑的。

  HTML5的进度事件

  HTML5中有一个新的Progress Events,它为我们提供了以下信息:

  1.总文件大小

  2.已加载上传的大小。

  3.长度是可计算的——进度是可计算的吗?

  信息不多,但足以算出文件的进度。当然还有很多东西它没有直接给,非常遗憾。

  HTML

  和普通的文件上传代码没有太大区别。但是,请注意,输入标记与onchange上的JavaScript函数相关联。

  !Type dochtmlhtmlhtmlhead title使用XMLHttpRequest上载文件/title/headbydyformid= form 1 enctype= multipart/form-data method= post action= Upload . PHP div class= row label for= fileToUpload 选择要上载的文件/label input type= File name= fileToUpload id= fileToUpload onchange= files elected();//div div id= fileName /div div id= fileSize /div div id= fileType /div div class= row input type= button onclick= uploadFile() value= Upload //div div id= progress number /div/form/body/htmlJavaScript

  一旦我们在HTML中使用了input,我们就可以在JS代码中获得一个FileList对象。这个对象是HTML5中新添加的文件API的一部分。每个文件列表对象都是一组文件对象,它们具有以下属性:

  1.名称文件名(不包括路径)

  2.type文件的MIME类型(小写)

  3.大小文件的大小(以字节为单位)

  这正是我们所需要的。当然,HTML5中还有一个FileReader对象,但我们这里不使用。现在通过以上三项内容,我们已经能够控制用户上传的文件大小和文件类型,从而减少服务器再次检测时的压力,提高安全系数。

  函数files elected(){ var file=document。getelementbyid( fileToUpload ).文件[0];if(file){ var fileSize=0;如果(文件。大小1024 * 1024)文件大小=(数学。圆形(文件。尺寸* 100/(1024 * 1024))/100 .toString()" MB ";else文件大小=(数学。圆形(文件。尺寸* 100/1024)/100).toString()" KB ";文档。getelementbyid(“文件名”).innerHTML= Name:文件。姓名;文档。getelementbyid( fileSize )。innerHTML= Size: fileSize;文档。getelementbyid(“fileType”).innerHTML= Type:文件。类型;}}那么当用户选择好文件,点击上传之后,又将发生什么呢?

  函数uploadFile(){ var xhr=new XMLHttpRequest();var FD=文档。getelementbyid(“form 1”).getFormData();/*事件侦听器*/xhr。上传。addevent侦听器( progress ,uploadProgress,false);xhr.addEventListener(load ,uploadComplete,false);xhr.addEventListener(error ,uploadFailed,false);xhr.addEventListener(abort ,uploadCanceled,false);/*确保将下面的全球资源定位器(Uniform Resource Locator)更改为您的上传服务器端脚本*/xhr.open(POST , upload.php )的网址;xhr。发送(FD);}函数上传进度(evt){ if(evt。长度可计算){ var完成百分比=数学。圆形(evt。加载* 100/evt。合计);文档。getelementbyid(“进度号”).innerHTML=完成百分比。tostring()“%”;} else {文档。getelementbyid(“进度号”).innerHTML="无法计算";} }功能上传完成(evt){/*服务器发回响应*/alert(evt。目标。响应文本)时引发此事件;}函数上传失败{ alert(试图上传文件时出错。);}函数上传已取消(evt) { alert(用户取消了上传,或者浏览器断开了连接。);}在代码的第二行中,我们的射流研究…代码又使用了另一个HTML5推出的新对象——表单数据。上传对象是用户的表单数据的集合,它以键值对的形式存储了表单数据,其值能够包括数字、字符串以及文件。我们通过辗转这个对象,来向服务器提交数据。

  当然,这个对象我们也可以在代码中手工构建,比如说像下面这样:

  var FD=new FormData();fd.append(author , Shiv Kumar );fd.append(name , Html 5文件API/FormData’);fd.append(fileToUpload ,document。getelementbyid( fileToUpload ).文件[0]);回到正题。回顾上一段代码,我们增加了许多有关XMLHttpRequest的事件监听,其目的是为了获取文件上传的真实情况。尤其需要注意的是,我们所挂钩的,并不是XMLHttpRequest本身,而是其属性,比如上传进度。

  完整代码

  最后,来看看完整的代码。

  !文档类型html html标题使用XMLHttpRequest -最小上传文件/title脚本类型= text/JavaScript 函数files elected(){ var file=document。getelementbyid( fileToUpload ).文件[0];if(file){ var fileSize=0;如果(文件。大小1024 * 1024)文件大小=(数学。圆形(文件。尺寸* 100/(1024 * 1024))/100 .toString()" MB ";else文件大小=(数学。圆形(文件。尺寸* 100/1024)/100).toString()" KB ";文档。getelementbyid(“文件名”).innerHTML= Name:文件。姓名;文档。getelementbyid( fileSize )。innerHTML= Size: fileSize;文档。getelementbyid(“fileType”).innerHTML= Type:文件。类型;} }函数uploadFile(){ var FD=new FormData();fd.append(fileToUpload ,document。getelementbyid( fileToUpload ).文件[0]);var xhr=new XMLHttpRequest();xhr。上传。addevent侦听器( progress ,uploadProgress,false);xhr.addEventListener(load ,uploadComplete,false);xhr.addEventListener(error ,uploadFailed,false);xhr.addEventListener(abort ,uploadCanceled,false);xhr.open(POST ,上传最少。aspx’);xhr。发送(FD);}函数上传进度(evt){ if(evt。长度可计算){ var完成百分比=数学。圆形(evt。加载* 100/evt。合计);文档。getelementbyid(“进度号”).innerHTML=完成百分比。tostring()“%”;} else {文档。getelementbyid(“进度号”).innerHTML="无法计算";} }功能上传完成(evt){/*服务器发回响应*/alert(evt。目标。响应文本)时引发此事件;}函数上传失败{ alert(试图上传文件时出错。);}函数上传已取消(evt) { alert(用户取消了上传,或者浏览器断开了连接。);}/script/head body form id= form 1 enctype= multipart/form-data method= post action= Upload。= fileToUpload 的PHP div class= row 标签选择要上载的文件/label input type= File name= fileToUpload id= fileToUpload onchange= files elected();//div div id= fileName /div div id= fileSize /div div id= fileType /div div class= row input type= button onclick= Upload file() value= Upload /div div id= progress number /div/form/body/html我们的任务完成了吗?可以说完成了,因为这段代码已经能够完成上传文件的任务,而且也能够显示上传的进度;但是理应说我们没有,因为除了这个骨架超文本标记语言之外,我们还有很多没有做的事情,比如半铸钢钢性铸铁(铸造半钢)的美化等等。不过这就不是我们这篇文章的主题了。

  最后,提醒一下,教程的代码应当在支持新特性的浏览器之上运行,如果你不清楚自己的浏览器是否支持,可以在这里查询。

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • windows下cmd中切换路径与目录查看,cmd怎么切换路径到文件夹
  • windows下cmd中切换路径与目录查看,cmd怎么切换路径到文件夹,cmd命令打开及切换目录路径的实现
  • wget下载文件到指定目录,wget下载整个文件夹
  • wget下载文件到指定目录,wget下载整个文件夹,wget下载整个网站(整个子目录)或特定目录
  • u盘exe病毒如何根除,如何根除U盘文件夹exe病毒
  • u盘exe病毒如何根除,如何根除U盘文件夹exe病毒,U.EXE病毒删除方法
  • svn在eclipse中的使用,eclipse不显示svn路径,Eclipse设置svn忽略文件或文件夹(svn-ignore)的操作
  • Linux系统删除文件夹命令,linux系统中删除文件的命令
  • Linux系统删除文件夹命令,linux系统中删除文件的命令,Linux系统删除文件夹和文件的命令
  • jsp 上传文件夹,jsp多文件上传
  • jsp 上传文件夹,jsp多文件上传,JSP组件commons-fileupload实现文件上传
  • dos 删除文件夹命令,dos 删除文件夹 目录不是空的
  • dos 删除文件夹命令,dos 删除文件夹 目录不是空的,dos 删除文件夹 rd
  • Win10共享文件夹怎么设置访问密码,win10共享文件夹设置密码后没有权限访问
  • win10用户的文件名怎么改,window10怎样更改用户文件夹名称
  • 留言与评论(共有 条评论)
       
    验证码: