JS中FormData类实现文件上传

当需要上传文件时,可以使用JS中的FormData类来实现。下面是实现文件上传的完整攻略:

创建一个表单

首先,要在HTML中创建一个表单,指定具体的上传文件的路径和上传方法:

<form action="upload.php" method="post" enctype="multipart/form-data">
   <input type="file" name="file" />
   <input type="submit" value="上传文件" />
</form>

获取文件并发送请求

使用JavaScript获取上传文件,并发送请求,这里使用Fetch API来发送POST请求

<script>
   function uploadFile() {
      var formData = new FormData();
      var fileField = document.querySelector("input[type='file']");

      formData.append("file", fileField.files[0]);

      fetch('upload.php', {
         method: 'POST',
         body: formData
      })
      .then(response => response.json())
      .then(data => {
         console.log(data);
      })
      .catch(error => {
         console.error(error)
      })
   }
</script>

在上例中,我们首先创建了一个FormData实例formData,接着获取了input元素的第一个文件,将其作为参数传递给append()方法,最后通过Fetch API来发送POST请求并处理响应结果。

服务器端代码

上传的文件必须在服务器端进行处理。因此,在你的服务器端代码中需要有上传文件的处理逻辑。

PHP处理上传文件的代码示例如下:

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["file"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

// 检查文件大小
if ($_FILES["file"]["size"] > 500000) {
    echo "文件过大,请重新上传";
    $uploadOk = 0;
}

// 检查文件类型
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "只允许上传 jpg, jpeg, png 和 gif 文件";
    $uploadOk = 0;
}

// 检查文件是否存在,并移动到指定目录
if ($uploadOk == 0) {
    echo "上传失败";
} else {
    if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
        echo "文件成功上传到目录下:" . $target_file;
    } else {
        echo "上传失败";
    }
}
?>

在服务器端处理上传文件的逻辑中,我们检查了文件的大小和类型,并将上传的文件移动到指定目录下。如果上传文件成功,则返回文件上传成功信息,否则返回错误信息。

示例

下面是两个上传文件的示例。第一个示例将上传照片,并在上传成功后展示上传的照片。

<html>
   <body>
      <form action="upload_photo.php" method="post" enctype="multipart/form-data">
         <input type="file" name="file" id="file">
         <input type="submit" value="上传照片" onclick="uploadPhoto()">
      </form>
      <div id="photo"></div>
   </body>

   <script>
      function uploadPhoto() {
         var formData = new FormData();
         var fileField = document.querySelector("#file");

         formData.append("file", fileField.files[0]);

         fetch('upload_photo.php', {
            method: 'POST',
            body: formData
         })
         .then(response => response.json())
         .then(data => {
            console.log(data);
            let image = document.createElement('img');
            image.src = data.fileUrl;
            document.getElementById('photo').appendChild(image);
         })
         .catch(error => {
            console.error(error)
         })
      }
   </script>
</html>

第二个示例将上传音乐文件,并在上传成功后播放音乐文件。

<html>
   <body>
      <form action="upload_music.php" method="post" enctype="multipart/form-data">
         <input type="file" name="file" id="file">
         <input type="submit" value="上传音乐文件" onclick="uploadMusic()">
      </form>
      <audio id="musicPlayer" controls></audio>
   </body>

   <script>
      function uploadMusic() {
         var formData = new FormData();
         var fileField = document.querySelector("#file");

         formData.append("file", fileField.files[0]);

         fetch('upload_music.php', {
            method: 'POST',
            body: formData
         })
         .then(response => response.json())
         .then(data => {
            console.log(data);
            let musicPlayer = document.getElementById('musicPlayer');
            musicPlayer.src = data.fileUrl;
         })
         .catch(error => {
            console.error(error)
         })
      }
   </script>
</html>

在上传成功后,我们通过HTML5 Audio API来播放音乐文件。

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

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

相关文章

  • asp.net(C#)中给控件添加客户端js事件的方法

    给控件添加客户端js事件是asp.net(C#)开发中的常见需求,我们可以通过以下步骤完成: 第一步:在aspx页面中引入js文件 在aspx页面中需要引入相应的js文件,例如: <script type="text/javascript" src="~/scripts/jquery-3.6.0.min.js"&…

    JavaScript 2023年6月11日
    00
  • React中完整实例讲解Recoil状态管理库的使用

    下面我将详细讲解React中完整实例讲解Recoil状态管理库的使用的完整攻略: 1. 什么是Recoil状态管理库 Recoil是一个由Facebook团队开发的状态管理库,用于管理React应用程序中的应用状态。它减少了在子组件中传递多层道具的需求,以及在应用程序中传递数据的繁琐过程。 Recoil与其他状态管理库不同之处在于它提供了两种新的概念:ato…

    JavaScript 2023年6月11日
    00
  • JS数组交集、并集、差集的示例代码

    下面我将介绍JS数组交集、并集、差集的示例代码,让大家有更深入的理解。 JS数组交集 数组交集指的是两个或两个以上数组中共同的元素。下面是一个示例代码: const arr1 = [1, 2, 3, 4, 5]; const arr2 = [3, 4, 5, 6, 7]; const arr3 = [4, 5, 6, 7, 8]; const interse…

    JavaScript 2023年5月27日
    00
  • 利用jQuery.Validate异步验证用户名是否存在(推荐)

    这里是利用 jQuery.Validate 异步验证用户名是否存在的攻略。在这个攻略中,我们将会使用到 jQuery、jQuery.Validate 和 AJAX 技术。 简介 为了提高用户体验和安全性,我们需要在网站的注册和登录页面上添加对用户名的合法性验证,例如:长度、唯一性等。 在这个过程中,我们可以使用一些前端框架和插件来把这些验证工作变得更加简单。…

    JavaScript 2023年6月10日
    00
  • 基于js中的存储键值对以及注意事项介绍

    下面是关于“基于js中的存储键值对以及注意事项介绍”的完整攻略: 基于JS中的存储键值对 在JavaScript中,可以使用键值对存储数据。这被称为对象。对象是由键-值对构成的集合。可以通过键来访问值。 JavaScript中存储键值对的方式主要有以下三种: 1. 对象 对象是由键-值对构成的集合。可以使用对象字面量创建对象。对象字面量是由一对大括号包裹起来…

    JavaScript 2023年6月11日
    00
  • 纯js网页画板(Graphics)类简介及实现代码

    那么我们来详细讲解一下“纯js网页画板(Graphics)类简介及实现代码”的攻略。 简介 Graphics 类是一个封装了浏览器 Canvas 的工具类,它提供了一些方法,使用户能够在 Canvas 上进行绘图。 实现代码 初始化 首先,我们要定义一个 Graphics 类,可以使用 ES6 的类语法来实现: class Graphics { constr…

    JavaScript 2023年6月10日
    00
  • JAVASCRIPT 客户端验证数据的合法性代码(正则)第1/2页

    下面是详细的讲解。 JAVASCRIPT 客户端验证数据的合法性代码(正则)第1/2页 本篇文章主要介绍如何使用JavaScript代码实现客户端验证数据的合法性,具体内容包括正则表达式的使用、表单验证等。 正则表达式的使用 在JavaScript中,可以使用正则表达式来验证数据的格式是否合法。下面是一个示例,用于验证是否为合法的手机号码: function…

    JavaScript 2023年6月1日
    00
  • 十代酷睿的性能差异 i9-10900K/i7-10700K/i5-10600K性能对比

    十代酷睿的性能差异 i9-10900K/i7-10700K/i5-10600K性能对比 随着十代酷睿处理器的推出,消费者可以选择 i9-10900K、i7-10700K、i5-10600K 等不同的处理器型号。这些处理器具有不同的性能和价格,本文将详细讲解它们之间的性能差异。 i9-10900K i9-10900K 是十代酷睿处理器中最高端的型号,采用了 L…

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