Ajax上传文件进度条Codular

2019-09-14 06:48:51于丽

现在,人们喜欢在浏览网页时做一些其他事情而不离开该网页,这通常是通过ajax来实现.大多数情况,人们使用jQuery来实现,但是随着浏览器的进步,人们比不需要这么做.这里我们将介绍如何在不离开页面的情况下将文件上传到服务器,我们将使用与我们之前的文章中使用的相同的后端PHP代码. 该脚本将上传文件至服务器,同时显示上传进度,并最终返回上传文件的链接地址.在某些情况下,你可能想要返回上传文件的id或者其他的应用信息. Note: 该代码不支持较老的ie浏览器,通过Can I use我们只支持ie10+

Let's Code

我们将从HTML结构开始,然后是JavaScript,然后我将给您提供PHP代码,这部分改编于之前教程 - 对PHP代码将不会有太多的解释。

HTML

我们只需要使用两个输入框,一个是文件类型file,另一个只是一个按钮button,以便我们可以监听到它被点击发送文件上传请求。 我们还将有一个div,我们改变宽度以突出显示上传的状态。

如下所示:

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS File Upload with Progress</title>
  <style>
  .container {
    width: 500px;
    margin: 0 auto;
  }
  .progress_outer {
    border: 1px solid #000;
  }
  .progress {
    width: 20%;
    background: #DEDEDE;
    height: 20px; 
  }
  </style>
</head>
<body>
  <div class='container'>
    <p>
      Select File: <input type='file' id='_file'> <input type='button' id='_submit' value='Upload!'>
    </p>
    <div class='progress_outer'>
      <div id='_progress' class='progress'></div>
    </div>
  </div>
  <script src='upload.js'></script>
</body>
</html>

你将看到我们写了一点进度条样式,并在底部加入脚本文件来处理文件上传以及进度条展示.

JavaScript

首先, 我们需要拿到我们将要使用的标签,他们已经用id标记上.

var _submit = document.getElementById('_submit'), 
_file = document.getElementById('_file'), 
_progress = document.getElementById('_progress');

下一步,给_submit添加点击事件,用以上传我们选择的文件.为此,我们将使用addEventListener方法,点击按钮后让其调用upload方法.

_submit.addEventListener('click', upload);

现在我们可以继续处理上传,有以下几步:

    检查被选中的文件 动态创建要发送的文件数据 通过js创建XMLHttpRequest 上传文件

检查被选中的文件

我们的文件输入框_file有一个查询被选中文件队列的参数files-如果你设置了multiple参数将可以选多个文件.我们做简单的检查判断,如果该数组长度大于0,则继续,否则直接返回.

if(_file.files.length === 0){
  return;
}