jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】

下面是详细讲解jquery+ajax实现上传图片并显示上传进度功能的完整攻略。

一、准备工作

  1. 新建一个文件夹,包含index.htmlupload.php两个文件
  2. 下载jquery-3.6.0.min.js并放到文件夹里
  3. 设定upload.php接收上传文件并保存到指定目录

二、HTML页面

index.html中添加以下HTML结构:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>上传图片并显示上传进度</title>
</head>
<body>
  <h2>上传图片并显示上传进度</h2>
  <form enctype="multipart/form-data">
    <input type="file" name="file" id="file">
    <br><br>
    <input type="button" value="上传图片" id="uploadBtn">
  </form>
  <div id="progressBar" style="margin-top: 20px; width: 300px; height: 20px; background-color: #eee;">
    <div id="progress" style="height: 100%; width: 0%; background-color: #0c0;"></div>
  </div>

  <script src="jquery-3.6.0.min.js"></script>
  <script src="index.js"></script>
</body>
</html>

其中,包含一个form表单和一个上传按钮,上传成功后会显示上传进度条。

三、javascript代码

index.js中添加以下代码:

$(function () {
  // 绑定上传按钮点击事件
  $("#uploadBtn").click(function () {
    var formdata = new FormData();
    var file = $("#file")[0].files[0];
    // 判断是否选择了文件
    if (!file) {
      alert("请先选择上传文件!");
      return;
    }
    formdata.append("file", file);

    $.ajax({
      url: "upload.php",
      type: "POST",
      cache: false,
      data: formdata,
      processData: false,
      contentType: false,
      xhr: function () {
        var xhr = new XMLHttpRequest();
        // 上传进度处理
        xhr.upload.addEventListener("progress", function (e) {
          if (e.lengthComputable) {
            var percent = Math.round((e.loaded / e.total) * 100);
            $("#progress").css("width", percent + "%").text(percent + "%");
          }
        }, false);
        return xhr;
      },
      success: function (data) {
        // 上传成功后处理
        alert(data);
        $("#progress").css("width", "0%").text("");
        $("#file").val("");
      },
      error: function (xhr) {
        // 上传失败后处理
        alert(xhr.responseText);
      }
    });
  });
});

这里使用jquery的AJAX方法来处理文件上传,formData对象可以方便地将文件添加到上传请求的正文中;xhr对象可用来监听上传进度信息。

四、PHP后台

upload.php中添加以下代码:

<?php
// 允许上传的文件类型和大小
$allowTypes = array('jpeg', 'jpg', 'png', 'gif');
$maxSize = 2 * 1024 * 1024; // 2MB

// 判断是否存在文件
if (!isset($_FILES['file'])) {
  die(json_encode(array('error' => '文件不存在!')));
}

// 判断是否为合法文件
$file = $_FILES['file'];
$fileType = pathinfo($file['name'], PATHINFO_EXTENSION);
if (!in_array($fileType, $allowTypes)) {
  die(json_encode(array('error' => '文件类型不支持!')));
}
if ($file['size'] > $maxSize) {
  die(json_encode(array('error' => '文件大小不能超过2MB!')));
}

// 将文件保存到服务器
$uploadDir = 'uploads/';
if (!file_exists($uploadDir)) {
  mkdir($uploadDir);
}
$fileName = time() . '.' . $fileType;
$filePath = $uploadDir . $fileName;
if (!move_uploaded_file($file['tmp_name'], $filePath)) {
  die(json_encode(array('error' => '上传失败,请重试!')));
}

// 上传成功
echo json_encode(array('success' => '上传成功!', 'filePath' => $filePath));
?>

在接收到上传文件后,首先要判断文件是否存在以及文件类型和大小是否合法,然后将文件保存到指定目录中。最后返回上传成功或失败信息,以及文件在服务端的路径。

五、示例说明

示例1:上传成功

选择一张jpg格式一张图片(大小不超过2MB),点击上传按钮,进度条开始显示上传进度,上传成功后会弹出提示框。另外,成功上传后,在页面上可以看到已上传的图片。

<!-- 在body中添加以下HTML结构 -->
<img src="" id="uploadedImg" style="display: none;">
// 在index.js中的success回调函数中添加以下代码
$("#uploadedImg").attr("src", data.filePath).css("display", "block");

示例2:上传失败

选择大小超过2MB的文件,点击上传按钮,弹出提示框提示上传失败。

完整代码

完整的代码已上传到GitHub:https://github.com/KevinMaVincent/jquery-ajax-upload-demo,可以通过clone或下载zip的方式获取完整代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】 - Python技术站

(1)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • jQWidgets jqxBarGauge relativeInnerRadius属性

    jQWidgets jqxBarGauge relativeInnerRadius属性 jQWidgets是一个基于jQuery的UI组件库,提供了丰富的UI件工具,包括表格、图表单、历、菜单等。jqBarGauge是jQWidgets中的一个组件可以用水平或垂直的条形图。jqBarGauge提供了relativeInnerRadius属性,用于设置条形图的…

    jquery 2023年5月9日
    00
  • jQuery中replaceAll()方法用法实例

    当使用 jQuery 选择器选择到多个元素时,将所有选中的元素替换成指定元素或 HTML 代码的方法是使用 replaceAll() 方法。 方法语法 $(selector).replaceAll(content, callback) 参数解释: selector:必须参数,要替换的元素选择器。 content:可选参数,转换成新内容的 DOM 元素、数组或…

    jquery 2023年5月27日
    00
  • jQWidgets jqxGrid getselectedcell()方法

    以下是关于“jQWidgets jqxGrid getselectedcell()方法”的完整攻略,包含两个示例说明: 方法简介 jqxGrid 控件的 getcell() 方法用于获取当前中单元格的信息。该方法的语法如下: $("#jqxGrid").jqxGrid(‘getselectedcell’); 在上述语法中,#jqxGrid…

    jquery 2023年5月10日
    00
  • jQuery UI Tooltips open()方法

    以下是关于 jQuery UI Tooltips open() 方法的详细攻略: jQuery UI Tooltips open() 方法 可以使用 open() 方法来手动打开工具提示小部件。 语法 $(selector).tooltip( "open" ); 参数 无参数。 示例一:手动打开工具提示小件 <!DOCTYPE ht…

    jquery 2023年5月11日
    00
  • 基于RequireJS和JQuery的模块化编程日常问题解析

    基于RequireJS和JQuery的模块化编程日常问题解析 背景 模块化编程是当前前端开发的重要趋势之一,通过模块化可以方便地组织代码、提高代码可读性和维护性,以及减少不必要的资源和代码加载等问题。RequireJS和JQuery是当前最为常用的两个模块化开发库,本文将详细介绍在实际开发中基于RequireJS和JQuery的模块化编程日常问题解析,包括模…

    jquery 2023年5月19日
    00
  • jQuery slideToggle()方法

    当你想在一个网页上实现一个可交互的折叠效果时,jQuery提供了slideToggle()方法来实现这个功能。slideToggle()方法可以让元素在展开和收起之间切换,并自动适配高度。 以下是使用slideToggle()方法的完整攻略: 什么是slideToggle()方法? slideToggle()方法是一个jQuery函数,它可以让元素在展开和收…

    jquery 2023年5月12日
    00
  • jQWidgets jqxTreeGrid showHeader属性

    以下是关于 jQWidgets jqxTreeGrid 组件中 showHeader 属性的详细攻略。 jQWidgets jqxTreeGrid showHeader 属性 jQWidgets jqxTreeGrid 的 showHeader 属性用于控制是否显示表头。表头是一行,用于显示列标题。 语法 $(‘#treegrid’).jqxTreeGrid…

    jquery 2023年5月12日
    00
  • jQuery)扩展jQuery系列之一 模拟alert,confirm(一)

    下面我将详细讲解如何使用jQuery扩展实现模拟alert和confirm功能。 什么是jQuery扩展 在开发过程中,我们常常需要使用一些常用的功能,例如模拟弹出框,实现图片轮播等,这些功能都可以通过jQuery扩展来实现。 jQuery扩展是一个非常重要的功能,它可以让我们直接在jQuery中添加自己的方法,以实现自定义的功能。在jQuery中,每个扩展…

    jquery 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部