FormData实现文件上传

2023-11-13

应用场景:

FormData+Ajax技术实现文件上传

1.FormData使用

FormData是一个构造函数,首先new FormData(),得到一个FormData对象

可以直接使用,直接console会是一个空白的对象,有append方法,delete,get,.......

append(键,值)可以向空白的FormData中追加键值对的数据,

键 数据项的名字,必须是字符串 ; 值 数据项的值,可以是任意类型的数据

直接追加三个数据,但是此时输出fd里是看不到的,不像普通的对象形式。想看到数据,只能get.age,就能看到值,即get.键=值。

    const fd=new FormData()
    console.log(fd) 
​
    fd.append('username','zs')
    fd.append('age',20)
    fd.append('accd',1312)
​
    console.log(fd)  //空的
    console.log(fd.get('age'))  //20

2.FormData实现文件上传

  • 选择图片文件

  • 把用户选择的文件存入FormData对象(也能实现form表单序列化,

  • 使用axios把FormData对象发送给服务器

  • 模拟文件选择器的点击事件

过程:

input里的type属性是file,就是文件选择。

然后先获取这个输入框,然后就使用FormData,先new,再append,名字,年龄,然后存储文件数据,文本域有change事件。当选择的文件发送了改变,就会触发change事件,所以这里添加一个change事件。

给input添加change事件,只要选择文件就会被改变就会触发事件,即使是第一次选择文件也会触发。

如何获取选择的文件呢?FormData存文件

此时输出this,this指的是当前的文件域,会输出当前的input,打印详细信息,console.dir,就能看到里面的很多属性,有一个属性files

文件域有files属性,里面存着用户选择的文件,files[0] 就是file文件

然后把这个东西append给formdata对象

    <input type="file" id="iptfile">
</body>
<script>
    let iptfile=document.querySelector("#iptfile")
    let fd=new FormData()
​
    fd.append('username','zs')
    fd.append('age',23)
​
    //文本域的change事件
    iptfile.addEventListener('change',function(){
        console.log('change触发')   //选择一次触发一次
        console.log(this.files[0])   //存的是当前选择的图片
​
        fd.append('imgobj',this.files[0])
        fd.forEach((value,key)=>{
            console.log(value,key)
        })
​
    })

案例-头像上传

文件上传:

1.点击按钮,弹出文件选择框----模拟点击文件的选择器,实现弹框选择文件

通过代码点击文本域,iptfile.cilck,点击上传图片的按钮,反而执行的是选择文件input的click事件

2.实现文件上传

文件上传必须是post,使用formdata,给input添加change事件,[0]是undefined表示用户没有选择文件,所以!0表示上传了文件,return 就阻止后面代码执行,先new formdata,然后append,把图片给对象,然后使用axios发送,data就是dormdata对象

会返回一个url,然后改变路径,把返回的路径和服务器路径结合,就变成了图片的新路径

此时改变文件,网页里的图片也会跟着变化

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FormData实现文件上传 的相关文章

随机推荐

  • 关于AI自动写作的资料

    AI 自动写作 产品调研 第一种是AI新闻时事类写作 核心场景是在内容平台通过人 机混编的方式 机器帮助编辑 内容创作者 减少重复劳动 提高生产效率 主要调研了今日头条的xiaomingbot 腾讯的Dreamwriter 百度的writi
  • iOS架构师_消息转发机制

    1 动态方法解析 对象在收到无法处理的消息时 会调用下面的方法 前者是调用类方法时会调用 后者是调用对象方法时会调用 未实现类方法调用 BOOL resolveClassMethod SEL sel 未实现实例方法调用 BOOL resol
  • osg学习(七十)如何根据视口对象自动调整视点位置、距离

    osgGA CameraManipulator cpp void CameraManipulator computeHomePosition const osg Camera camera bool useBoundingBox doubl
  • Unity的2D图集处理,并切割出一张张小图片

    转载请注明出处 http blog csdn net hongyouwei article details 45011315 在我们找资源的时候 有时候会遇到那种把一堆图片放进一张png图片里面的情况 在做2D游戏的时候 我们往往需要将里面
  • jackson自定义全局序列化、反序列化

    需要自定义Jackson序列化和反序列化有两种方式 一种是全局定义 一种是非全局定义 先来看看全局定义 全局定义的步骤如下 以定义一个localDateTime的序列化和反序列化为例 一 创建序列化类 创建一个序列化类然后继承JsonSer
  • 基于JavaWeb(JSP+Servlet+MySQL)编程实现员工信息的添加、修改、删除、列表显示。

    1 项目结构 2 页面主要代码 2 1员工添加页面代码以及效果图 add jsp 员工添加
  • linux 修改用户密码的几种方法

    1 passwd 命令 手动修改 root localhost testuser passwd testuser Changing password for user testuser New password Retype new pas
  • Spring Factories

    该文章转载自 https blog csdn net lvoyee article details 82017057 Spring Boot中有一种非常解耦的扩展机制 Spring Factories 这种扩展机制实际上是仿照Java中的S
  • 简说数据库事务的ACID

    事务是应用程序中一系列严密的操作 所有操作必须成功完成 否则在每个操作中所作的所有更改都会被撤消 也就是事务具有原子性 一个事务中的一系列的操作要么全部成功 要么一个都不做 原子性 Atomicity 一致性 Consistency 隔离性
  • postman 模拟请求中添加 header,post请求中传json参数

    1 GET 请求 2 Post 请求 请求参数为Json header中带有参数 问题延伸 GET请求不能够 添加 Body 吗 答案 转载于 https www cnblogs com zacky31 p 8808110 html
  • 【网络安全】——区块链安全和共识机制

    区块链安全和共识机制 摘要 区块链技术作为一种分布式去中心化的技术 在无需第三方的情况下 使得未建立信任的交易双方可以达成交易 因此 区块链技术近年来也在金融 医疗 能源等多个行业得到了快速发展 然而 区块链为无信任的网络提供保障的同时 也
  • 《算法导论》总结与分析

    算法导论总结与分析 分治 strassen算法 介绍 步骤 正确性证明 复杂度分析 排序 堆排序 介绍 步骤 构建 排序 优先队列 复杂度分析 快速排序 介绍 步骤 复杂度分析 最坏情况 最好情况 线性时间排序 介绍 步骤 复杂度分析 数据
  • 课堂小作业之3位水仙花数计算

    3位水仙花数计算 描述 3位水仙花数 是指一个三位整数 其各位数字的3次方和等于该数本身 例如 ABC是一个 3位水仙花数 则 A的3次方 B的3次方 C的3次方 ABC
  • 组合优化技术

    组合优化是指在离散领域内 寻找最优解的问题 在通信工程中 组合优化的应用非常广泛 例如在无线通信系统中 可以使用组合优化算法来优化信道资源分配 功率控制 调制方式等问题 组合优化问题通常包含以下要素 决策变量 表示问题的解 通常是一个离散的
  • spring cloud版本由1.5.x升级到2.x所遇到的坑

    众所知周 spring cloud 1 5版本与2 x版本差异很大 官方没有做向下兼容 导致大家对于升级spring cloud版本都非常慎重 此处 首先推荐阅读官方给出的迁移手册 Spring Boot 2 0 Migration Gui
  • ChatGPT学习相关资料整理

    ChatGPT学习相关资料整理 关于ChatGPT的相关咨询和新闻 ChatGPT能力起源 https mp weixin qq com s 4l0ADjdsCxSVvBeVKxSqWA ChatGPT的发展历程 https zhuanla
  • 生产数据采集MDC的总体思路

    一 数控机床通过网口连到局域网 MDC服务器与数控机床通讯 定时取得所需数据 将数据写入数据库 二 MES对数据库中的数据进行分析 展示到大屏上 我这里是机械制造型企业 以上步骤已经完成 有相同需求的朋友 欢迎一起交流细节
  • SQL INSERT INTO 语句

    INSERT INTO 语句用于向表中插入新记录 语法 指定列插入数据 INSERT INTO table name colnum1 colnum2 column3 VLAUES value1 value2 value3 不指定列插入数据
  • java - JVM CPU100%,问题排查

    前段时间我们新上了一个新的应用 因为流量一直不大 集群QPS大概只有5左右 写接口的rt在30ms左右 因为最近接入了新的业务 业务方给出的数据是日常QPS可以达到2000 大促峰值QPS可能会达到1万 所以 为了评估水位 我们进行了一次压
  • FormData实现文件上传

    应用场景 FormData Ajax技术实现文件上传 1 FormData使用 FormData是一个构造函数 首先new FormData 得到一个FormData对象 可以直接使用 直接console会是一个空白的对象 有append方