在Vue中如何使用FormData接口

FormData接口是前端与后端数据交互的重要工具,尤其在异步文件上传和表单数据序列化方面。它允许以键值对形式存储数据,并提供了append、delete、get、getAll、has、set等方法进行操作。通过Ajax,这些数据可以方便地发送到服务器。本文详细介绍了如何创建和操作FormData对象,以及如何利用它来优化表单数据的处理流程。
摘要由CSDN通过智能技术生成

一 、概况

FormData接口提供了一种表示表单数据的键值对 name/value 的构造方式,能够将数据通过前端 Ajax 请求发送给后端。

FormData的主要用途有两个:

  1. 异步上传文件。
  2. 实现form表单数据的序列化,将数据以键值对 name/value 的形式传到后台,从而减少表单元素的拼接,提高工作效率。

二、如何使用

(1)创建一个FormData对象

// 通过new  FormData() 来创建一个对象
let formData = new FormData();

(2)对象名.append(name,value)

append(name: string, value: string | Blob, fileName?: string): void;

向FormData中添加新的属性值,就算FormData里面已经存在了对应的name值,也不会被覆盖掉,而是新增一个属性值;如果存在一个name对应多个value,可通过getAll()方法获取。

formData.append('status', this.addForm.status);

(3)对象名.delete(name)

delete(name: string): void;

通过name删除FormData中对应的value。

formData.delete('status');

(4)对象名.get(name)

get(name: string): FormDataEntryValue | null;

从FormData中获取name对应的value。如果name对应多个value,此方法返回第一个value值。

const status= formData.get('status');

(5)对象名.getAll(name)

getAll(name: string): FormDataEntryValue[];

从FormData中获取key对应的value。如果name对应多个value,此方法返回value数组。

const status= formData.getAll('status');

(6)对象名.has(name)

has(name: string): boolean;

判断FormData中是否存在对应的name。存在,返回true;不存在,返回false。

formData.has('status')

(7)对象名.set(name,value)

set(name: string, value: string | Blob, fileName?: string): void;

给FormData设置一个属性值,如果FormData对应的属性值存在 则覆盖之前的属性值,否则新增一个属性值;

如果第二个参数传递的是一个Blob对象或者File对象,那么第三个参数fileName就需要传入文件名(传给服务端)。

formData.set('status','2')
formData.set('files', myFile.file(0),'myFileName.png')

(8)对象名.entries()

方法返回一个迭代器(iterator),可以遍历访问FormData中的所有键值对。

for(var pair of formData.entries()) {
    console.log(pair[0]+ ', '+ pair[1]); // pair[0]为name ,pair[1]为value
 }

(9)对象名.keys()

该方法返回一个迭代器(iterator),可以遍历访问FormData中的所有name。

for (var name of formData.keys()) {
    console.log(name);
 }

(10)对象名.values()

方法返回一个迭代器(iterator),可以遍历访问FormData中的所有value。

for (var value of formData.values()) {
    console.log(value);
 }

Vue上传文件时,通常会将文件转换为FormData类型,并将其作为请求参数发送到后端接口。然而,在某些情况下,接口接收到的FormData对象可能为空对象。有几种可能的原因和解决方法: 1. 检查前端代码:首先需要确保在Vue组件正确获取到文件对象。可以通过监听文件选择的事件(如change)或手动选择文件后,使用input元素的`files`属性来获取文件对象。确保获取到的文件对象不为null。 2. 检查axios请求配置:在发送axios请求时,需要配置请求头和数据格式,确保FormData对象正确传递。在axios配置对象添加`headers`属性,设置`Content-Type`为`multipart/form-data`,并传递FormData对象作为请求数据。 3. 检查后端接口:确保后端接口FormData类型的请求参数进行正确处理。在后端接口,需要使用适当的方式来解析和处理FormData对象。具体的处理方式可能因后端框架而异,可以查看框架文档了解如何正确解析FormData。 4. 检查接口返回结果:如果接口返回的FormData对象仍为空对象,可能是因为后端接收到的请求参数与预期不符。可以在后端接口打印请求参数,或使用调试工具查看接口请求和返回数据,以确定问题所在。 总之,上传文件时出现FormData转换为空对象的问题可能是由于前端代码、请求配置、后端接口或返回结果等多个方面引起的。通过逐一排查、调试和对比前后端代码,可以解决这个问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值