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

news2024/12/29 10:13:36

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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/747970.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java堆溢出和栈溢出

一、堆溢出 import java.util.ArrayList; import java.util.List;public class Demo_071202 {public static void main(String[] args) {List<Test> listnew ArrayList<>();while (true){list.add(new Test());}}static class Test{} }设置JVM初始堆空间和最大堆…

告别传统MQ:Kafka是一个分布式事件流平台,这到底意味着什么呢?

1、引言 在大数据时代&#xff0c;实时数据处理和流式数据分析变得越来越重要。为了应对大规模数据的高吞吐量和低延迟处理需求&#xff0c;出现了各种分布式流处理平台。其中&#xff0c;Apache Kafka作为一种高性能、可扩展的分布式消息系统&#xff0c;成为了广泛应用于实时…

并发编程 - EDA 实操

文章目录 需求CodeUser定义不同类型的EventChat Channel(Handler)Chat User线程小结需求 借助我们开发的EDA小框架,模拟一个简单的聊天应用程序。 Code User 我们定义一个User对象,代表聊天室的参与者 package com.artisan

【每日一题】931 . 最小下降路径总和

【每日一题】931 . 最小下降路径总和 931 . 最小下降路径总和题目描述解题思路 931 . 最小下降路径总和 题目描述 给你一个n x n方形队列&#xff0c; matrix请你找出并返回matrix下降路径 的最小和。 下降路径可以从第一行中的任意元素开始&#xff0c;并从每一行中选择一个…

函数基础

一、初识函数 函数&#xff0c;可以当做是一大堆功能代码的集合。 def 函数名():函数内编写代码......函数名()例如&#xff1a; # 定义名字叫info的函数 def info():print("第一行")print("第二行")print("第n行...")info()运用函数的场景&a…

uniApp之同步资源失败,未得到同步资源的授权,请停止运行后重新运行,并注意手机上的授权提示、adb、shell、package、uninstall

文章目录 背景解决思路执行查找第三方应用的指令执行卸载指令 背景 一开始正常编译运行&#xff0c;由于应用页面有些许奇怪的错误&#xff0c;便想着卸载&#xff0c;重新运行安装调试基座。卸载后&#xff0c;运行还是会出现&#xff0c;明明已经把应用卸载了&#xff0c;还是…

C++在线五子棋对战(网页版)项目:实用工具类模块代码实现

在线五子棋项目中需要用到的实用工具模块&#xff1a; 1.日志宏&#xff1a;实现程序日志打印 2.mysql_util:数据库的连接和初始化&#xff0c;句柄的消耗&#xff0c;语句的执行 3.json_util&#xff1a;封装实现json的序列化和反序列化 4.string_util&#xff1a;封装实现字符…

Clion开发STM32之W5500系列(四)

W5500协议层之DHCP功能 头文件 #ifndef STM32_VET6_W5500_DHCP_H #define STM32_VET6_W5500_DHCP_H#include "socket.h"#define DEVICE_ID "w5500" #define IP_CONFLICT_STR "CHECK_IP_CONFLICT" #define DHCP_FLAGSBROADCAST 0x8000 /* …

π141E30S 200Mbps四通道数字隔离器兼容代替NSi8141S0

π141E30S荣湃深力科 200Mbps四通道数字隔离器兼容代替NSi8141S0 π141E30S数字隔离器具有出色的性能特 征和可靠性&#xff0c;整体性能优于光耦和基于其他原理的数字隔离器。 在不需要调制和解调的情况下&#xff0c;实现电压信号跨越隔离介质精 准传输。 π141E30S传输通道…

利用ffmpeg使用脚本+excel批量合成视频

起因是忘了是什么时候&#xff0c;下载的视频是被切割的一个一个的&#xff0c;所以网上找了方法&#xff0c;利用ffmpeg批量进行了批量合成&#xff0c;这里记录一下&#xff0c;并用gpt解释一下脚本含义。 1、文件名批量转mp4格式 如果文件名不规范&#xff0c;可以利用exce…

spark Structured Streaming checkpoint参数优化

目录 1 问题描述2 分析 checkpointLocation 配置 2.1 checkpointLocation 在源码调用链2.2 MetadataLog&#xff08;元数据日志接口&#xff09;3 分析 checkpointLocation 目录内容 3.1 offsets 目录3.2 commitLog 目录3.3 metadata 目录3.4 sources 目录3.5 sinks 目录4 解决…

跨站脚本攻击XSS

​​​​​​1、漏洞原理及防御 XSS又叫CSS (CrossSiteScript),因为与层叠样式表(css)重名,所以叫Xss&#xff0c;中文名叫跨站脚本攻击。 xss攻击&#xff0c;主要就是攻击者通过“html注入”篡改了网页&#xff0c;插入了恶意的脚本&#xff0c;从而在用户浏览网页时&#…

迅为龙芯3A5000_7A2000COMe_模块和主板

龙芯 3A50007A2000 COME 采用全国产龙芯 3A5000 处理器&#xff0c;基于龙芯自主指令系统 (LoongArche)的 LA464 微结构&#xff0c;并进一步提升频率&#xff0c;降低功耗&#xff0c;优化性能。桥片采用龙芯 7A2000&#xff0c;支持 PCIE 3.0、USB 3.0 和 SATA 3.0、显示接口…

单独编译 Android 固件-打包 update.img-iTOP-RK3588开发板

进入到 3588-android12 文件夹&#xff0c;输入以下命令设置 java 版本为 1.8 版本&#xff0c;如下图所示: source javaenv.sh java -version 输入以下命令使能编译环境: source build/envsetup.sh lunch rk3588_s-userdebug 执行完上述命令&#xff0c;如果需要编译 uboo…

如何破解滑动验证码?

本文通过自动化查询域名或公司的备案信息&#xff0c;来演示其中图片滑动验证码的破解方式&#xff0c;以此来思考验证码的安全性问题&#xff0c;思考如何设计出安全性更高的验证码。 注意&#xff1a;破解验证码进行网络内容抓取可能是一种违规行为&#xff0c;可以以此进行验…

西门子PLC硬件编程需要注意的几个要点

往往一个好的编程程序习惯可以让事情事半功倍。用正确的逻辑思维和方法去写程序&#xff0c;一方面可以减少出错&#xff0c;另一方面就是方便检查程序里出现的bug。下面就为大家盘点一下&#xff0c;西门子PLC的一些硬件编程的好习惯。 1、关于选型 项目开始需要统计出IO点表…

Linux嵌入式项目-智能家居

一、资料下载 二、框架知识 三、MQTT通信协议 1、上位机APP主要工作 1.wait for msg / while(1)订阅等待消息 2.处理消息 客户端创建了两个线程&#xff0c;一个线程用于发布消息&#xff0c;一个线程用于监听订阅消息 &#xff08;那我的仿真系统也可以啊&#xff0c;一个…

《AutoSar实战》DIO配置

文章目录 前言一、配置过程1&#xff0c;选择引脚2&#xff0c;DIO模块配置1&#xff09;新建DioChannel 3&#xff0c;PORT模块配置4&#xff0c;保存并生成DIO&#xff0c;PORT模块 二、实现并验证1&#xff0c;调用函数接口2&#xff0c;示波器测量周期 总结 ->返回总目录…

富士施乐/Fuji Xerox SC2022 CPS DA 彩色激光复印机不能扫描的解决方法

一台富士施乐/Fuji Xerox SC2022 CPS DA 彩色激光复印机用网线连接的&#xff0c;有分配的IP地址&#xff0c;有三台电脑连接&#xff0c;可打印&#xff0c;但是不能扫描。 驱动也没问题&#xff0c;找了一台电脑先删除了打印机&#xff0c;在官网下载了驱动重新安装&#xff…

【Spring学习一】简单认识Spring是什么?——框架

目录 1、为什么要学习Spring&#xff1f; 2、Spring是什么&#xff1f; 1、IoC是什么&#xff1f; 2、进一步通过代码演示理解IoC 3、怎么理解容器&#xff1f; 4、知道DI与IoC的区别&#xff1f; 1、为什么要学习Spring&#xff1f; 我们常说的Spring 指的是 Spring Fra…