广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >基于HTML5 Ajax文件上传进度条的实现方法
  • 447
分享到

基于HTML5 Ajax文件上传进度条的实现方法

2024-04-02 19:04:59 447人浏览 安东尼
摘要

这篇文章主要介绍“基于HTML5 ajax文件上传进度条的实现方法”,在日常操作中,相信很多人在基于html5 Ajax文件上传进度条的实现方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,

这篇文章主要介绍“基于HTML5 ajax文件上传进度条的实现方法”,在日常操作中,相信很多人在基于html5 Ajax文件上传进度条的实现方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”基于HTML5 Ajax文件上传进度条的实现方法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

首先HTML5用AJAX提交数据先要学习一个HTML5新增加的对象:FORMData

FormData 对象可以使用append 方法进行 key - value的数据添加,与以前我们常用的JSON不同的就是可以异步上传二进制文件。

1、FormDate对象的创建

var formData = new FormData();

2、向 FormDate 对象添加数据

formData.append("catname", "我是一只喵");
formData.append("age", 1);         // 数字类型会转为字符串类型
// 可以增加上传的二进制文件,比如fileInputElement对象中已经包含了用户所选择的文件
formData.append("userfile", fileInputElement.files[0]);
//也可以将一个 Blob 对象添加到 formData 中
var oFileBody = "<a id="a"><b id="b">hey!</b></a>"; 
var oBlob = new Blob([oFileBody], { type: "text/xml"});
formData.append("WEBmasterfile", oBlob);

3、使用 FormData 对象

var xhr = new XMLHttpRequest();
xhr.open("POST", "upload");
xhr.send(formData);

HTML部分

FormData 对象简单的介绍完毕后,我们来看看页面的HTML代码是怎么写的

<img width="400" height="250"/><br /> 
<input type="file" id="pic" name="pic" onchange="showPic()"/>
<input type="button" value="上传图片" onclick="uploadFile()" /><br /> 
<div id="parent">
 <div id="son"></div>
</div>

最下面的div是用来显示进度条的,所以需要对应的CSS样式。样式如下,颜色不好看,自己改吧:

<style type="text/css"> 
 #parent{width:550px; height:10px; border:2px solid #09F;} 
 #son {width:0; height:100%; background-color:#09F; text-align:center; line-height:10px; font-size:20px; font-weight:bold;} 
</style>

JS部分

重头戏来了,在页面上加载上Jquery后我们来看 javascript 是怎么写的,首先是 file 组件的 onchange事件方法:

function showPic(){
 var pic = $("#pic").get(0).files[0];
 $("img").prop("src" , window.URL.createObjectURL(pic) );
}

showPic的第一行是从 file 对象得到上传文件 。 第二行则为 img 设置了src属性。 可以在页面中得到即时预览的效果。

在看 uploadFile 方法之前,再让我们简单学习一下进度事件 (Progress Events )的progress 吧 ...... 

Progress Events规范是W3C的一个工作草案,定义了与客户端服务器通信有关的事件。这些事件最早其实值针对XHR操作,但目前也被其它api借鉴。有以下6个进度事件。

loadstart:在接收到相应数据的第一个字节时触发。
progress:在接收相应期间持续不断触发。  //我们就只看着一个好了
error:在请求发生错误时触发。
abort:在因为调用abort()方法而终止链接时触发。
load:在接收到完整的相应数据时触发。
loadend:在通信完成或者触发error、abort或load事件后触发。

progress事件是Mozilla提交的,这个事件会在浏览器接收新数据期间周期性地触发。而onprogress事件处理程序会接收到一个event对象,其target属性是XHR对象,但包含着三个额外的属性:

lengthComputable :表示进度信息是否可用的布尔值

position :表示已经接收的字节数

totalSize :表示根据Content-Length相应头部确定的预期字节数。

有了这些信息,我们就可以为用户创建一个进度指示器了。但是 问题又来了, jQuery的 ajax 方法没有关于 progress 事件的操作。这怎么玩~~

好在通过查阅资料发现,jQuery的ajax方法调用的XMLHttpRequest对象是可以指定的!!!

基于HTML5 Ajax文件上传进度条的实现方法

看 8453行,就是它了。于是 uploadFile 方法的ajax部分的时候代码就变成了这个样式。

最重要的部分代码:

function uploadFile(){
  
  // 获取上传文件,放到 formData对象里面
  var pic = $("#myhead").get(0).files[0];
  var formData = new FormData();
 formData.append("file" , pic);
  $.ajax({
    type: "POST",
    url: "upload",
    data: formData ,  //这里上传的数据使用了formData 对象
    processData : false, 
    //必须false才会自动加上正确的Content-Type 
    contentType : false , 
    
    //这里我们先拿到jQuery产生的 XMLHttpRequest对象,为其增加 progress 事件绑定,然后再返回交给ajax使用
    xhr: function(){
      var xhr = $.ajaxSettings.xhr();
      if(onprogress && xhr.upload) {
        xhr.upload.addEventListener("progress" , onprogress, false);
        return xhr;
      }
    } 
  });
}

最后加上 onprogress 方法,为整个功能花上个句号。


function onprogress(evt){
  var loaded = evt.loaded;     //已经上传大小情况 
 var tot = evt.total;      //附件总大小 
 var per = Math.floor(100*loaded/tot);  //已经上传的百分比 
  $("#son").html( per +"%" );
 $("#son").css("width" , per +"%");
}

最后附上整个页面的代码,方便对比。

<!DOCTYPE html>
<html>
 <head>
 <title>html5_2.html</title>
 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
 <style type="text/css"> 
  #parent{width:550px; height:10px; border:2px solid #09F;} 
  #son {width:0; height:100%; background-color:#09F; text-align:center; line-height:10px; font-size:20px; font-weight:bold;} 
 </style>
 <script type="text/javascript" src="js/jquery-1.9.1.js"></script>
 <script type="text/javascript">
 function showPic(){
  var pic = $("#pic").get(0).files[0];
  $("img").prop("src" , window.URL.createObjectURL(pic) );
  uploadFile();
 }
 function uploadFile(){
  var pic = $("#pic").get(0).files[0];
  var formData = new FormData();
  formData.append("file" , pic);
   
  $.ajax({
   type: "POST",
   url: "upload",
   data: formData ,
   processData : false, 
   //必须false才会自动加上正确的Content-Type 
   contentType : false , 
   xhr: function(){
    var xhr = $.ajaxSettings.xhr();
    if(onprogress && xhr.upload) {
     xhr.upload.addEventListener("progress" , onprogress, false);
     return xhr;
    }
   } 
  });
 }
 
 function onprogress(evt){
  var loaded = evt.loaded;     //已经上传大小情况 
  var tot = evt.total;      //附件总大小 
  var per = Math.floor(100*loaded/tot);  //已经上传的百分比 
  $("#son").html( per +"%" );
  $("#son").css("width" , per +"%");
 }
 </script>
 </head>
 <body>
 <img width="400" height="250"/><br /> 
 <input type="file" id="pic" name="pic" onchange="showPic()"/>
 <input type="button" value="上传图片" onclick="uploadFile()" /><br /> 
 <div id="parent">
  <div id="son"></div>
 </div> 
 </body>
</html>

到此,关于“基于HTML5 Ajax文件上传进度条的实现方法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 基于HTML5 Ajax文件上传进度条的实现方法

本文链接: https://www.lsjlt.com/news/76949.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于HTML5 Ajax文件上传进度条的实现方法
    这篇文章主要介绍“基于HTML5 Ajax文件上传进度条的实现方法”,在日常操作中,相信很多人在基于HTML5 Ajax文件上传进度条的实现方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,...
    99+
    2022-10-19
  • HTML5+Ajax文件上传进度条怎么实现
    这篇文章主要介绍了HTML5+Ajax文件上传进度条怎么实现,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。原本打算使用jquery插件进行异...
    99+
    2022-10-19
  • HTML5中Ajax如何实现文件上传并显示进度条
    这篇文章主要介绍HTML5中Ajax如何实现文件上传并显示进度条,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下效果图:html5上传是同步上传的方式,所以能够实现进度条的显示。1.上传文件:首先我们用aj...
    99+
    2023-06-08
  • Ajax如何实现上传文件进度条Codular
    这篇文章主要介绍了Ajax如何实现上传文件进度条Codular,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Let's Code我们...
    99+
    2022-10-19
  • Ajax中怎么实现文件上传带进度条
    这篇文章将为大家详细讲解有关Ajax中怎么实现文件上传带进度条,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。(1)创建上传对象在应该Common-FileU...
    99+
    2022-10-19
  • jquery+ajax的多文件上传进度条如何实现
    这篇文章主要介绍了jquery+ajax的多文件上传进度条如何实现,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。效果图前端代码,基于jque...
    99+
    2022-10-19
  • 基于ajax的html如何实现文件上传
    这篇文章主要介绍基于ajax的html如何实现文件上传,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. 怎样自定义样式?1)、只管按照自己喜欢看到的样式去定义即可,如<a h...
    99+
    2022-10-19
  • 如何实现基于Blod的ajax进度条
    这篇文章主要介绍如何实现基于Blod的ajax进度条,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!普通的浏览器下载在web开发中,如果要实现下载功能,往往都是使用新开web页面或者是...
    99+
    2022-10-19
  • MVC中怎么基于Ajax和HTML5实现文件上传功能
    这篇文章主要讲解了“MVC中怎么基于Ajax和HTML5实现文件上传功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MVC中怎么基于Ajax和HTML5实...
    99+
    2022-10-19
  • vue实现实时上传文件进度条
    本文实例为大家分享了vue实时上传文件进度条,供大家参考,具体内容如下 //上传文件组件 <el-upload         action         :show-fi...
    99+
    2022-11-13
  • vue文件批量上传及进度条展示的实现方法
    目录主要实现功能上传初始化逻辑uploadStore()multiUpload() multiRun()uploadAsync(fileInfo)总结主要实现功能 1.多文...
    99+
    2022-12-24
    vue实现批量上传 vue 多文件上传 vue进度条样式
  • JS实现上传文件显示进度条
    本文实例为大家分享了JS实现上传文件显示进度条的具体代码,供大家参考,具体内容如下 用户反馈:图片上传过程中,如果网络比较慢,会发现上传图片后没有一点反应,体验性很差,图片回显也比较...
    99+
    2022-11-13
  • php上传大文件进度条怎么实现
    要实现PHP上传大文件的进度条,可以使用以下步骤:1. 在HTML中创建一个文件上传表单,设置`enctype="multipart...
    99+
    2023-10-11
    php
  • Node.js实现兼容IE789的文件上传进度条
    Nodejs对文件上传的处理 在Express4里req.files已经是undefined了;现在用的最多的可能就是formidable了,你知道了它有个progress事件,于是心中大喜,低版本IE的进...
    99+
    2022-06-04
    文件上传 进度条 Node
  • vue如何实现实时上传文件进度条
    这篇文章主要介绍了vue如何实现实时上传文件进度条,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下//上传文件组件<el-upload  ...
    99+
    2023-06-29
  • HTML5如何实现上传文件显示进度
    这篇文章主要为大家展示了“HTML5如何实现上传文件显示进度”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“HTML5如何实现上传文件显示进度”这篇文章吧。 这...
    99+
    2022-10-19
  • 如何使用Html5实现异步上传文件,支持跨域,带有上传进度条
    这篇文章主要为大家展示了“如何使用Html5实现异步上传文件,支持跨域,带有上传进度条”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用Html5实现异步上...
    99+
    2022-10-19
  • Android基于Http协议实现文件上传功能的方法
    本文实例讲述了Android基于Http协议实现文件上传功能的方法。分享给大家供大家参考,具体如下: 注意一般使用Http协议上传的文件都比较小,一般是小于2M 这里示例是上传...
    99+
    2022-06-06
    HTTP 方法 文件上传 http协议 Android
  • Struts2实现文件上传时显示进度条功能
           最近在做一个资源共享的项目中,采用了Struts2.1.8+Spring2.5.6+hibernate3.32的框架整合方式进行开发。在文件上传这块,因为需要实现文件...
    99+
    2023-05-31
    struts2 上传 进度条
  • 如何实现fileUpload文件上传带进度条效果
    这篇文章将为大家详细讲解有关如何实现fileUpload文件上传带进度条效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。效果图:服务器端servlet:public&n...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作