JS实现上传文件显示进度条

yizhihongxing

JS实现上传文件显示进度条的完整攻略:

  1. HTML部分

首先要有一个文件上传表单,可通过以下代码添加:

<form name="form1" method="post" enctype="multipart/form-data" action="upload.php">
      <input type="file" name="file" id="file"/>
      <input type="button" value="上传" id="upload"/>
</form>

其中,需要指定表单的提交方式为POST,同时设置表单的enctype属性为multipart/form-data,可支持文件上传,form1是表单的名称,file是文件上传的input的name属性。

  1. JS部分

通过JS代码实现文件上传,进度条等效果。可参考以下示例:

function upload() {
      var file = document.getElementById("file");
      //获取文件对象

      var xhr = new XMLHttpRequest();
      //创建异步请求对象

      var fd = new FormData();
      fd.append("file", file.files[0]);
      //把要上传的文件添加到表单数据中

      xhr.upload.addEventListener("progress", uploadProgress, false);
      //监听上传进度事件

      xhr.addEventListener("load", uploadComplete, false);
      //监听上传完成事件

      xhr.addEventListener("error", uploadFailed, false);
      //监听上传失败事件

      xhr.addEventListener("abort", uploadCanceled, false);
      //监听上传取消事件

      xhr.open("POST", "upload.php");
      //打开异步请求对象的连接

      xhr.send(fd);
      //发送表单数据
}

function uploadProgress(evt) {
      if (evt.lengthComputable) {
            var percentComplete = Math.round(evt.loaded * 100 / evt.total);
            //文件上传进度计算

            document.getElementById("progress").innerHTML = percentComplete.toString() + "%";
            //显示文件上传进度百分比
      }
      else {
            document.getElementById("progress").innerHTML = "上传失败";
      }
}

function uploadComplete(evt) {
      alert("文件上传成功!");
}

function uploadFailed(evt) {
      alert("文件上传失败!");
}

function uploadCanceled(evt) {
      alert("文件上传已取消!");
}

document.getElementById("upload").addEventListener("click", upload, false);
//给上传按钮添加点击事件监听器

以上JS代码实现了文件的上传功能,并且在上传过程中实现了进度条的显示。

  1. CSS部分

为文件上传进度条添加样式,可参考以下代码:

.progress-bar {
      width: 100%;
      height: 30px;
      border: 1px solid #ffffff;
      position: relative;
      margin-top: 10px;
      margin-bottom: 10px;
      background-color: #f8f8f8;
      overflow: hidden;
      -moz-border-radius: 4px;
      -webkit-border-radius: 4px;
      border-radius: 4px;
}

.progress {
      height: 100%;
      color: #ffffff;
      text-align: right;
      line-height: 30px;
      background-color: #23ade5;
      position: absolute;
      top: 0px;
      left: 0px;
      z-index: 1;
      -webkit-transition: width 0.3s ease;
      -moz-transition: width 0.3s ease;
      transition: width 0.3s ease;
}

以上CSS样式实现了进度条的基本样式。

示例:

示例1:通过以上代码实现文件上传功能后,可参考以下示例1进行测试。

<!DOCTYPE html>
<html>
      <head>
            <meta charset="utf-8">
            <title>文件上传测试</title>
            <style>
                  .progress-bar {
                        width: 100%;
                        height: 30px;
                        border: 1px solid #ffffff;
                        position: relative;
                        margin-top: 10px;
                        margin-bottom: 10px;
                        background-color: #f8f8f8;
                        overflow: hidden;
                        -moz-border-radius: 4px;
                        -webkit-border-radius: 4px;
                        border-radius: 4px;
                  }

                  .progress {
                        height: 100%;
                        color: #ffffff;
                        text-align: right;
                        line-height: 30px;
                        background-color: #23ade5;
                        position: absolute;
                        top: 0px;
                        left: 0px;
                        z-index: 1;
                        -webkit-transition: width 0.3s ease;
                        -moz-transition: width 0.3s ease;
                        transition: width 0.3s ease;
                  }
            </style>
      </head>

      <body>
            <form name="form1" method="post" enctype="multipart/form-data" action="upload.php">
                  <input type="file" name="file" id="file"/>
                  <input type="button" value="上传" id="upload"/>
            </form>
            <div class="progress-bar">
                  <div id="progress" class="progress" style="width: 0%;"></div>
            </div>
            <script>
                  function upload() {
                        var file = document.getElementById("file");

                        var xhr = new XMLHttpRequest();

                        var fd = new FormData();
                        fd.append("file", file.files[0]);

                        xhr.upload.addEventListener("progress", uploadProgress, false);

                        xhr.addEventListener("load", uploadComplete, false);

                        xhr.addEventListener("error", uploadFailed, false);

                        xhr.addEventListener("abort", uploadCanceled, false);

                        xhr.open("POST", "upload.php");

                        xhr.send(fd);
                  }

                  function uploadProgress(evt) {
                        if (evt.lengthComputable) {
                              var percentComplete = Math.round(evt.loaded * 100 / evt.total);

                              document.getElementById("progress").style.width = percentComplete.toString() + "%";

                              document.getElementById("progress").innerHTML = percentComplete.toString() + "%";
                        }
                        else {
                              document.getElementById("progress").innerHTML = "上传失败";
                        }
                  }

                  function uploadComplete(evt) {
                        alert("文件上传成功!");
                  }

                  function uploadFailed(evt) {
                        alert("文件上传失败!");
                  }

                  function uploadCanceled(evt) {
                        alert("文件上传已取消!");
                  }

                  document.getElementById("upload").addEventListener("click", upload, false);
            </script>
      </body>
</html>

示例2:如果在单个页面上需多次实现文件上传和进度条效果,可通过以下示例2进行测试实现:

<!DOCTYPE html>
<html>
      <head>
            <meta charset="utf-8">
            <title>文件上传测试多次实现</title>
            <style>
                  .progress-bar {
                        width: 100%;
                        height: 30px;
                        border: 1px solid #ffffff;
                        position: relative;
                        margin-top: 10px;
                        margin-bottom: 10px;
                        background-color: #f8f8f8;
                        overflow: hidden;
                        -moz-border-radius: 4px;
                        -webkit-border-radius: 4px;
                        border-radius: 4px;
                  }

                  .progress {
                        height: 100%;
                        color: #ffffff;
                        text-align: right;
                        line-height: 30px;
                        background-color: #23ade5;
                        position: absolute;
                        top: 0px;
                        left: 0px;
                        z-index: 1;
                        -webkit-transition: width 0.3s ease;
                        -moz-transition: width 0.3s ease;
                        transition: width 0.3s ease;
                  }
            </style>
            <script>
                  function upload(id) {
                        var file = document.getElementById("file_" + id);

                        var xhr = new XMLHttpRequest();

                        var fd = new FormData();
                        fd.append("file", file.files[0]);

                        xhr.upload.addEventListener("progress", function (evt) {
                              uploadProgress(evt, id);
                        }, false);

                        xhr.addEventListener("load", function (evt) {
                              uploadComplete(evt, id);
                        }, false);

                        xhr.addEventListener("error", function (evt) {
                              uploadFailed(evt, id);
                        }, false);

                        xhr.addEventListener("abort", function (evt) {
                              uploadCanceled(evt, id);
                        }, false);

                        xhr.open("POST", "upload.php");

                        xhr.send(fd);
                  }

                  function uploadProgress(evt, id) {
                        if (evt.lengthComputable) {
                              var percentComplete = Math.round(evt.loaded * 100 / evt.total);

                              document.getElementById("progress_" + id).style.width = percentComplete.toString() + "%";

                              document.getElementById("progress_" + id).innerHTML = percentComplete.toString() + "%";
                        }
                        else {
                              document.getElementById("progress_" + id).innerHTML = "上传失败";
                        }
                  }

                  function uploadComplete(evt, id) {
                        alert("文件上传成功!");
                  }

                  function uploadFailed(evt, id) {
                        alert("文件上传失败!");
                  }

                  function uploadCanceled(evt, id) {
                        alert("文件上传已取消!");
                  }

                  function add() {
                        var newDiv = document.createElement("div");
                        //创建新的div

                        newDiv.innerHTML = "<input type='file' name='file_" + id + "' id='file_" + id + "'/><input type='button' value='上传' onclick='upload(" + id + ")'/><div class='progress-bar'><div id='progress_" + id + "' class='progress' style='width: 0%;'></div></div>";
                        //设置新的div的innerHTML

                        document.body.appendChild(newDiv);
                        //把新的div添加到页面中

                        id++;
                        //id自增
                  }

                  var id = 1;
                  //初始化id为1

                  window.onload = function () {
                        document.getElementById("add").addEventListener("click", add, false);
                        //给添加按钮添加点击事件监听器
                  }
                  //在页面加载完成后执行
            </script>
      </head>

      <body>
            <input type="button" value="添加" id="add"/>
      </body>
</html>

以上是JS实现上传文件显示进度条的完整攻略,通过以上代码可实现文件的上传和进度条的显示效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS实现上传文件显示进度条 - Python技术站

(0)
上一篇 2023年6月16日
下一篇 2023年6月16日

相关文章

  • 深入浅析Java常用的格式化Json工具类

    深入浅析Java常用的格式化Json工具类 什么是Json JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,也易于机器解析和生成。JSON是基于JavaScript的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯。这些特性使JSON成为理想的数据交换语言。 Jav…

    Java 2023年5月26日
    00
  • JDBC操作数据库的增加、删除、更新、查找实例分析

    JDBC操作数据库的增加、删除、更新、查找实例分析 Java Database Connectivity (JDBC) 是Java语言中用于在Java应用程序中连接和操作关系型数据库的标准API。它提供了一组Java接口,允许Java应用程序与各种关系型数据库进行通信,包括MySQL、Oracle、PostgreSQL等。 JDBC连接数据库 在使用JDBC…

    Java 2023年6月16日
    00
  • springMVC拦截器HandlerInterceptor用法代码示例

    下面详细讲解一下“springMVC拦截器HandlerInterceptor用法代码示例”的完整攻略。 什么是HandlerInterceptor? HandlerInterceptor是Spring MVC框架的拦截器,用于在controller处理请求之前和之后进行一些额外的处理。HandlerInterceptor是一个接口,需要自定义实现它,并将其…

    Java 2023年5月31日
    00
  • 深入浅析Jsp中 out.print 和 out.write 的区别

    这篇攻略将会详细探讨JSP中out.print和out.write的区别。 概述 在JSP页面中,有两个对象分别是out和response,用于将数据传送到浏览器。其中,out对象提供了一些方法,通过该方法我们可以输出一些内容到浏览器端的页面。 out对象的方法有很多,其中比较常用的是out.print和out.write。这里我们将会讲解这两个方法的区别。…

    Java 2023年6月15日
    00
  • Android解析json数据示例代码(三种方式)

    下面我来为您提供关于“Android解析json数据示例代码(三种方式)”的完整攻略。 Android解析json数据示例代码(三种方式) 在 Android 应用开发中,我们需要经常与后端 API 接口进行数据交互,并解析 JSON 格式的数据。本文将介绍三种常用的 Android 解析 JSON 数据的方法。 GSON GSON 是 Google 推出的…

    Java 2023年5月26日
    00
  • 浅谈Springboot2.0防止XSS攻击的几种方式

    浅谈Springboot2.0防止XSS攻击的几种方式 什么是XSS攻击? XSS(跨站脚本攻击),是指攻击者在web页面中插入恶意脚本,当用户浏览网页时,脚本会被执行,从而达到攻击者的目的。 常见的XSS攻击方式有反射型、存储型,以及DOM Based。在本文中,我们将围绕Springboot2.0介绍防止XSS攻击的几种方式。 1.使用HtmlUtils…

    Java 2023年5月20日
    00
  • springmvc集成shiro登录权限示例代码

    下面是关于SpringMVC集成Shiro登录权限的完整攻略,包含两个示例说明。 SpringMVC集成Shiro登录权限示例代码 Shiro是一个强大的Java安全框架,它提供了身份验证、授权、加密等功能。在SpringMVC中集成Shiro可以帮助我们更好地管理用户的登录和权限。在本文中,我们将介绍如何在SpringMVC中集成Shiro,并提供两个示例…

    Java 2023年5月17日
    00
  • JSP的Cookie在登录中的使用

    下面我来详细讲解JSP的Cookie在登录中的使用的攻略。 首先,什么是Cookie呢?Cookie是一种在客户端存储数据的小文件,通常用于记录用户的登陆状态、购物车、浏览记录等。在JSP中,我们可以通过Cookie实现用户的登录功能。具体使用方法如下: 1. 设置Cookie 当用户登录成功后,我们可以向客户端设置一个Cookie来保存用户登录状态。在JS…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部