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日

相关文章

  • 很好用的js日历算法详细代码

    如果你正在寻找一个简单易用且功能强大的js日历算法,那么你应该尝试使用这个“很好用的js日历算法”!这个算法不仅提供了完整的代码实现,还有详细的说明。在下面的步骤中,我们将详细的了解这个算法的使用方法。 步骤1: 下载日历算法代码 你可以在github上找到这个日历算法的代码,可以在你的本地环境中运行查看。你可以单击以下链接: 日历算法代码 然后,你需要从这…

    JavaScript 2023年5月27日
    00
  • 一篇文章搞定echarts地图轮播高亮

    下面是详细讲解“一篇文章搞定echarts地图轮播高亮”的完整攻略: 1.准备工作 在开始操作之前,你需要准备以下工具和技能: 计算、理解经纬度坐标系并能熟练使用echarts中的地图组件 熟练使用javascript编程语言 确保已经完成了echarts库和其依赖库的安装 2. 地图轮播高亮思路 地图轮播高亮的核心思路,是通过定时器不断切换并高亮指定点的策…

    JavaScript 2023年6月11日
    00
  • javascript 面向对象技术基础教程第1/2页

    JavaScript 面向对象技术基础教程攻略 概述 JavaScript 是一门基于对象编程的语言。面向对象编程 (OOP) 是一种典型的编程范式,它将问题抽象成一系列对象,然后通过对象之间的交互解决问题。在 JavaScript 中,有许多实现面向对象编程的技术,如对象、类和原型等。在本教程中,我们将通过介绍这些技术,帮助读者在 JavaScript 中…

    JavaScript 2023年6月10日
    00
  • JavaScript操作DOM元素的childNodes和children区别

    当操作网页中的DOM元素时,常常需要获取元素的子元素以及对这些子元素进行操作。在JavaScript中,有两个常用的属性用于获取DOM元素的子元素,分别是childNodes和children。虽然它们的功能类似,但也有一些区别。下面我们进行一一讲解。 childNodes属性 childNodes属性返回某一元素的所有子节点,包括文本节点。这个属性返回的对…

    JavaScript 2023年6月11日
    00
  • js为空或不是对象问题的快速解决方法

    这里是针对”js为空或不是对象问题的快速解决方法”的完整攻略。 背景分析 在开发JavaScript应用时,我们经常会遇到以下两种错误: Uncaught TypeError: Cannot read property ‘xxx’ of undefined 当我们使用某个对象属性时,出现了该错误,意味着该属性所属的对象没有被定义或为空。 Uncaught T…

    JavaScript 2023年5月18日
    00
  • Ajax+js实现异步交互

    实现”Ajax+js实现异步交互”的具体步骤如下: 创建 XMLHttpRequest 对象 使用Js 中的 XMLHttpRequest 对象创建Ajax请求,该对象用来与服务器交互,从服务器请求数据和处理响应。 var xmlhttp; if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Oper…

    JavaScript 2023年6月11日
    00
  • js function定义函数使用心得

    那么让我们来详细讲解一下“js function定义函数使用心得”的完整攻略。 1. 定义函数 在JavaScript中,定义函数主要有两种方式:函数声明和函数表达式。 1.1 函数声明 函数声明由function关键字后跟函数名和包含在一对圆括号中的参数列表构成,其语法格式如下: function functionName(parameter1, para…

    JavaScript 2023年5月27日
    00
  • javascript获取网页各种高宽及位置的方法总结

    下面我就详细讲解一下“JavaScript获取网页各种高宽及位置的方法总结”。 标准盒模型和IE盒模型 在获取页面元素的高度、宽度及其位置之前,我们需要先了解一下CSS盒模型。CSS盒模型即表示网页元素的布局模型,包括标准盒模型和IE盒模型两种。其中,标准盒模型指的是元素的宽度和高度仅包括内容,而IE盒模型指的是元素的宽度和高度包括内容、内边距和边框。 在J…

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