捕获FormData实现极简的上传图片到服务器-实战

1.postman设置请求和查看响应结果

说明:上图中通过传入参数名为avatar,参数值为file格式,请求方式为post,采用form-data格式传入服务器。响应结果。 

2.html5网页实现

    <input type="file" class="upload_inp" />
    <button class="upload_button">上传</button>
    <img src="" alt="" class="showImg" />

 

3.javascript

说明:获取 img,button.input元素,img是为了让响应的结果直接展示在页面上。

 // 获取img元素
  const img = document.querySelector("img");
  //   获取input元素
  const upload_inp = document.querySelector(".upload_inp");
  //   获取button元素
  const upload_button = document.querySelector(".upload_button");
//   声明一个将要上传服务器表单对象
  let newdata;

 获取input框的值

// 为input绑定一个change事件(当input框发生改变时候触发)
  upload_inp.addEventListener("change", function (e) {
    console.log(e.target.files);
    // FileList {0: File, length: 1}0: File {name: 'node.png', lastModified: 1688649480929, lastModifiedDate: Thu Jul 06 2023 21:18:00 GMT+0800 (中国标准时间), webkitRelativePath: '', size: 94861, …}length: 1[[Prototype]]: FileList
    newdata = e.target.files[0];
    //这是明明是个对象,不知道为什么能用[0]获取值
    // 这个FileList对象包含了文件的各种属性,例如文件名、文件类型、文件大小等。
// 在使用FormData对象上传文件时,我们需要使用e.target.files[0]来获取选中的文件信息。因为FormData对象需要一个参数来指定要上传的文件,而这个参数可以是一个字符串(表示文件名)、一个Blob对象或一个File对象。如果我们直接传递一个FileList对象给FormData对象,它会将其转换为一个字符串,其中包含了所有文件的信息。因此,我们需要使用e.target.files[0]来获取选中的单个文件信息。
  });

说明:e.target.files这是明明是个对象,不知道为什么能用 e.target.files[0]获取值。有大神的话,评论区见。

 4.ajax

说明:本次采用axios向服务器发送请求,并且服务器配置有token字段。如果没有,那么不写

Authorization属性名。

//   为button绑定点击事件
  upload_button.addEventListener("click", function () {
    // 创建一个formData实例对象
    let formData = new FormData();
    // 为实例对象添加属性
    formData.append("avatar", newdata, encodedFileName);
//axios请求
    axios({
      method: "POST",
      url: "http://127.0.0.1:3000/my/update/avatar",
//请求头,一般token放在请求头中
      headers: {
        "Content-Type": "multipart/form-data",
        Authorization:
          "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6NiwidXNlcm5hbWUiOiJmb3JldmVyIiwicGFzc3dvcmQiOiIiLCJuaWNrbmFtZSI6bnVsbCwiZW1haWwiOm51bGwsInVzZXJfcGljIjoiIiwiaWF0IjoxNjg5MTI0MzY3LCJleHAiOjE2OTA0MjAzNjd9.fwXZHAxivvcpNHs0ovRnw8rj19zk7ctqWCsmefyBxKw",
      },
//向服务器发送的数据
      data: formData,
    })
      .then((res) => {
//为img中属性src赋值服务器返回的地址
        img["src"] = res.data.url;
        console.log(res);
      })
      .catch((err) => {
        console.log(err);
      });
  });

5.前台

 6.源码

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>更换头像</title>
    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  </head>
  <body>
    <input type="file" class="upload_inp" />
    <button class="upload_button">上传</button>
    <img src="" alt="" class="showImg" />
  </body>
</html>
<script>
  // 获取img元素
  const img = document.querySelector("img");
  //   获取input元素
  const upload_inp = document.querySelector(".upload_inp");
  //   获取button元素
  const upload_button = document.querySelector(".upload_button");
//   声明一个将要上传服务器表单对象
  let newdata;
// 为input绑定一个change事件(当input框发生改变时候触发)
  upload_inp.addEventListener("change", function (e) {
    console.log(e.target.files);
    // FileList {0: File, length: 1}0: File {name: 'node.png', lastModified: 1688649480929, lastModifiedDate: Thu Jul 06 2023 21:18:00 GMT+0800 (中国标准时间), webkitRelativePath: '', size: 94861, …}length: 1[[Prototype]]: FileList
    newdata = e.target.files[0];
    //这是明明是个对象,不知道为什么能用[0]获取值
    // 这个FileList对象包含了文件的各种属性,例如文件名、文件类型、文件大小等。
// 在使用FormData对象上传文件时,我们需要使用e.target.files[0]来获取选中的文件信息。因为FormData对象需要一个参数来指定要上传的文件,而这个参数可以是一个字符串(表示文件名)、一个Blob对象或一个File对象。如果我们直接传递一个FileList对象给FormData对象,它会将其转换为一个字符串,其中包含了所有文件的信息。因此,我们需要使用e.target.files[0]来获取选中的单个文件信息。
  });
//   为button绑定点击事件
  upload_button.addEventListener("click", function () {
    // 创建一个formData实例对象
    let formData = new FormData();
    // 为实例对象添加属性
    formData.append("avatar", newdata, encodedFileName);
    axios({
      method: "POST",
      url: "http://127.0.0.1:3000/my/update/avatar",
      headers: {
        "Content-Type": "multipart/form-data",
        Authorization:
          "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6NiwidXNlcm5hbWUiOiJmb3JldmVyIiwicGFzc3dvcmQiOiIiLCJuaWNrbmFtZSI6bnVsbCwiZW1haWwiOm51bGwsInVzZXJfcGljIjoiIiwiaWF0IjoxNjg5MTI0MzY3LCJleHAiOjE2OTA0MjAzNjd9.fwXZHAxivvcpNHs0ovRnw8rj19zk7ctqWCsmefyBxKw",
      },
      data: formData,
    })
      .then((res) => {
        img["src"] = res.data.url;
        console.log(res);
      })
      .catch((err) => {
        console.log(err);
      });
  });
</script>

文章来源地址https://uudwc.com/A/EB11o

原文地址:https://blog.csdn.net/m0_62785037/article/details/131693981

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年07月14日 10:30
第51步 深度学习图像识别:Convolutional Vision Transformer建模(Pytorch)
下一篇 2023年07月14日 10:30