使用FormData对象

掌握JavaScript FormData:文件上传的终极指南 前端开发中,文件上传是一个常见但常让人头疼的需求。幸运的是,现代JavaScript提供了一个强大的工具——FormData对象,让文件上传变得简单高效。本文将带你深入探索FormData的强大功能!FormData是JavaScript中的一个API,专门用于构建表单数据,特别适合处理文件上传和AJAX请求。它能够将数据编码为multipart/form-data格式,这是HTTP中上传文件的标准格式。创建一个FormData对象非常简单: append()方法允许你添加各种类型的数据,包括字符串、Blo 阅读详情

使用FormData对象


  • TAGS 
  • 文件

利用FormData对象,你可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单".

创建一个FormData对象

你可以先创建一个空的FormData对象,然后使用append()方法向该对象里添加字段,如下:

var oMyForm = new FormData();

oMyForm.append("username", "Groucho");
oMyForm.append("accountnum", 123456); // 数字123456被立即转换成字符串"123456"

// fileInputElement中已经包含了用户所选择的文件
oMyForm.append("userfile", fileInputElement.files[0]);

var oFileBody = "<a id="a"><b id="b">hey!</b></a>"; // Blob对象包含的文件内容
var oBlob = new Blob([oFileBody], { type: "text/xml"});

oMyForm.append("webmasterfile", oBlob);

var oReq = new XMLHttpRequest();
oReq.open("POST", "http://foo.com/submitform.php");
oReq.send(oMyForm);
  
注: 字段"userfile"和"webmasterfile"的值都包含了一个文件.通过  FormData.append()方法赋给字段"accountnum"的数字被自动转换为字符(字段的值可以是一个 Blob对象,一个 File对象,或者一个字符串,剩下其他类型的值都会被自动转换成字符串).

在该例子中,我们创建了一个名为oMyForm的FormData对象,该对象中包含了名为"username", "accountnum", "userfile" 以及 "webmasterfile"的字段名,然后使用XMLHttpRequest的send()方法把这些数据发送了出去."webmasterfile"字段的值不是一个字符串,还是一个Blob对象.

使用HTML表单来初始化一个FormData对象

可以用一个已有的<form>元素来初始化FormData对象,只需要把这个form元素作为参数传入FormData构造函数即可:

var newFormData = new FormData(someFormElement);
  

例如:

var formElement = document.getElementById("myFormElement");
var oReq = new XMLHttpRequest();
oReq.open("POST", "submitform.php");
oReq.send(new FormData(formElement));
  

你还可以在已有表单数据的基础上,继续添加新的键值对,如下:

var formElement = document.getElementById("myFormElement");
formData = new FormData(formElement);
formData.append("serialnumber", serialNumber++);
oReq.send(formData);
  

你可以通过这种方式添加一些不想让用户编辑的固定字段,然后再发送.

使用FormData对象发送文件

你还可以使用FormData来发送二进制文件.首先在HTML中要有一个包含了文件输入框的form元素:

<form enctype="multipart/form-data" method="post" name="fileinfo">
  <label>Your email address:</label>
  <input type="email" autocomplete="on" autofocus name="userid" placeholder="email" required size="32" maxlength="64" /><br />
  <label>Custom file label:</label>
  <input type="text" name="filelabel" size="12" maxlength="32" /><br />
  <label>File to stash:</label>
  <input type="file" name="file" required />
</form>
<div id="output"></div>
<a href="javascript:sendForm()">Stash the file!</a>
  

然后你就可以使用下面的代码来异步的上传用户所选择的文件:

function sendForm() {
  var oOutput = document.getElementById("output");
  var oData = new FormData(document.forms.namedItem("fileinfo"));

  oData.append("CustomField", "This is some extra data");

  var oReq = new XMLHttpRequest();
  oReq.open("POST", "stash.php", true);
  oReq.onload = function(oEvent) {
    if (oReq.status == 200) {
      oOutput.innerHTML = "Uploaded!";
    } else {
      oOutput.innerHTML = "Error " + oReq.status + " occurred uploading your file.<br \/>";
    }
  };

  oReq.send(oData);
}
  

你还可以不借助HTML表单,直接向FormData对象中添加一个File对象或者一个Blob对象:

data.append("myfile", myBlob);
  

如果FormData对象中的某个字段值是一个Blob对象,则在发送http请求时,代表该Blob对象所包含文件的文件名的"Content-Disposition"请求头的值在不同的浏览器下有所不同,Firefox使用了固定的字符串"blob,"而Chrome使用了一个随机字符串.

你还可以使用jQuery来发送FormData,但必须要正确的设置相关选项:

var fd = new FormData(document.getElementById("fileinfo"));
fd.append("CustomField", "This is some extra data");
$.ajax({
  url: "stash.php",
  type: "POST",
  data: fd,
  processData: false,  // 告诉jQuery不要去处理发送的数据
  contentType: false   // 告诉jQuery不要去设置Content-Type请求头
});
formData:解决formData使用append追加后console仍为空 解决formData使用append追加后console仍为空 阅读详情

相关推荐

JavaScript - 实现向 formData 对象中追加数组或对象,使用 append() 插入数组、对象等复杂数据类型(vue / uniapp / react 项目通用解决方案)

JS,vue如何在FormData中追加数组?uniappvuejsformData传递数组,数组添加进formdata,javascript-将FormData对象放入数组,FormData传数组对象的方法前端,vueJS,如何在FormData中追加数组,JS,如何在FormData中追加数组,JS,如何在FormData中追加数组,formData传对象和数组、空文件的方法,我可以在javascript中将数组附加到'formdata'吗?,javascript如何向For

🏆 前端领域优质创作者 6756

记一个 FormData 多文件上传问题

问题描述: 直接给 FormData append 一个数组的话会变成一个字符串,这样后台拿不到文件信息,如下: const fd = new FormData(); fd.append('files', this.fileList); console.log(fd.getAll('files')); 解决办法: const fd = new FormData(); this.fileList...

Amy的博客 6167

从OFED到rdma-core:手把手带你搞定Linux下RDMA开发环境的选型与搭建

本文详细介绍了在Linux系统下搭建RDMA开发环境的完整流程,涵盖OFED与rdma-core的选型对比及分步安装指南。针对高性能计算和分布式存储需求,解析RDMA技术栈的核心组件,提供环境验证与性能测试方法,帮助开发者快速构建稳定高效的开发环境。特别适合需要优化网络性能的工程师参考。

weixin_26905487的博客 226

formData.append

然后,通过formData.append方法,将文本输入框的值和文件上传框的值添加到FormData对象中。在发送FormData对象之前,可以使用console.log(formData)来查看FormData对象的内容,以确保数据被正确添加。我们可以使用formData.append来将这些输入框的值添加到FormData对象中,然后将其发送到服务器。使用formData.append可以将键值对添加到FormData对象中,这样可以方便地将数据以键值对的形式发送到服务器。

qq_44080018的博客 2031

红外气体检测方案解析:从NDIR原理到物联网终端设计实践

气体检测是工业安全与环境监测的核心需求,其技术原理主要基于气体分子对特定物理或化学信号的响应。非色散红外(NDIR)技术作为一种物理检测方法,通过测量气体分子对特定波长红外光的吸收来定量浓度,因其不依赖化学反应,具备寿命长、抗干扰强和响应快等优势。在工程实践中,红外气体检测方案的价值在于为物联网终端设备提供了高可靠、低功耗的感知能力,广泛应用于工业过程监控、环境空气质量监测以及智能家居安全预警等场景。本文以一套集成了Microchip MCU、Axetris红外光源和Pyreos热释电传感器的参考设计为例,

weixin_30954817的博客 395

统信UOS V20 安装mysql5.7.42详细教程

到bin/下,执行下面的命令,初始化mysql服务信息,得到数据库的初始密码,实际如果目录不一样记得换成自己的目录。下载后通过远程将安装包上传至服务器,我这里将安装包上传至/usr/local/mysql 下。ps:这时候如果还是不能远程访问的话,可能是防火墙的原因,命令行执行以下命令即可。再次登录,发现缺少 libtinfo.so.5文件,再次建立软连接。登录,发现报错,提示缺少libncurses.so.5文件,使用。创建 /var/lib/ 下mysql目录。登录成功,修改密码,设置远程访问。

为谁伫立在风中 1万+

FormData 对象的使用

-- fromhttps://developer.mozilla.org/zh-CN/docs/Web/API/FormData/Using_FormData_Objects FormData对象用以将数据编译成键值对,以便用XMLHttpRequest来发送数据。其主要用于发送表单数据,但亦可用于发送带键数据(keyed data),而独立于表单使用。如果表单enctype属性设为multi...

王鹤霖的专栏 三人行必有我师 1691

MediaPipeUnityPlugin(最新版)摇摆拳人脸识别

MediaPipeUnityPlugin(最新版)摇摆拳人脸识别

不忘初心 方得始终 2984

ajax-FormData对象的使用

FormData 对象的作用 模拟HTML表单,相当于将HTML表单映射成表单对象,自动将表单对象中的数据拼接成请求参数的格式。 异步上传二进制文件 准备 HTML 表单 <form id="form"> <input type="text" name="username" /> <input type="password" name="pa...

解启超 567

AI使能的SVD算子:基于深度学习的矩阵分解方法

奇异值分解(Singular Value Decomposition, SVD)是线性代数中一种重要的矩阵分解方法,广泛应用于信号处理、数据降维、推荐系统等领域。传统SVD算法虽然精确,但在处理大规模矩阵时面临计算复杂度高、内存需求大等问题。本文提出了一种基于深度学习神经网络的SVD算子实现方法,完全摒弃传统数值算法,仅使用PyTorch框架构建的神经网络模型来完成大规模信道矩阵的SVD分解与还原。

huanghm88的专栏 1342

下载猫 —— 会员体系安全分析与加固方案

下载猫的会员验证体系完全失效,破解不需要任何工具链、不需要写代码、不需要改文件。已验证的成功攻击路径:攻击者启动软件时加一个参数,然后用 3 行 JavaScript 即可将会员状态改为"有效期至 2099 年",全部功能闸门放行。等价于普通用户按F12打开控制台输入 3 行代码,全程不到 10 秒。项目结论破解难度⭐ 极低(会按 F12 即可,无需任何破解工具)是否修改文件否(重启软件自动恢复)是否需要服务器否是否影响其他用户单人即可完成,可复制分发修复所需工作量。

猫敷雪 59

formdata传递参数_JS FormData对象使用方法实例详解

本文实例讲述了JS FormData对象使用方法。分享给大家供大家参考,具体如下:FormData的主要用途有两个:1、将form表单元素的name与value进行组合,实现表单数据的序列化,从而减少表单元素的拼接,提高工作效率。2、异步上传文件一、创建formData对象1、创建一个空对象://通过FormData构造函数创建一个空对象var formdata=new FormData();//...

weixin_39594080的博客 6694

一种基于机载LiDAR点云电力线自动提取方法

文章目录一、引言二、算法实现2.1实现步骤2.2实现代码 一、引言 二、算法实现 2.1实现步骤 (1)首先采用首先采用高程滤波方法去除地面点和低矮地物点,滤波后的点云数据中除电力线点云外还含部分杆塔点、高植被点和噪声点。 (2)根据点云空间维度特征提取电力线点,使用空间密度聚类的方法实现单根电力线精确分离。 2.2实现代码 在这里插入代码片 ...

dayuhaitang1的博客 5174

JS-FormData对象使用

前言 FormData 对象用来保存key/value结构的数据,通常用于from传输数据,也可以独立于form使用,用来传输密钥数据。 例子 1.创建FormData对象 var formData = new FormData(); formData.append(&quot;username&quot;, &quot;Groucho&quot;); formData.append(&quot;accountnum&quot;, 123..

wang704987562的博客 1万+

1分钟吃透一篇文献,借助AI辅助各部分精读,效率提升10倍(附AI提示词)

你现在是一名【研究领域】的资深博士,非常擅长阅读与分析长篇论文,那么接下来我会给你上传一篇论文,请你按照我的要求辅助我阅读。

qq_64378896的博客 645

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

FormData对象的使用

一、FormData对象的作用 a、模拟HTML表单,相当于将HTML表单映射为表单对象,自动将表单对象中的数据拼接成请求参数的格式 b、异步上传二进制文件(比如图片、视频和音频) FormData对象与ajax有关 FormData对象不能用于get请求 二、FormData对象的使用 1、映射表单对象 a、准备表单 <!--要有name属性,在表单提交时,将表单内容传递给服务器端--&g...

qq_40265402的博客 604

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

FormData 对象的基本使用

FormData 代表表单数据,是浏览器的原生对象。它可以当作构造函数使用,构造一个表单实例。它也可以接受一个表单的 DOM 节点当作参数,将表单的所有元素及其值,转换成一个个键值对,包含在返回的实例对象里面。FormData()还有第三种用法,如果想把“提交”(Submit)按钮也加入表单的键值对,可以把按钮的 DOM 节点当作FormData()的第二个参数。

jyn15159的博客 2398

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

通过jQuery Ajax使用FormData对象上传文件

html代码<form class="form-horizontal" role="form" action="" method="POST" id="uploadForm"> <input type="hidden" name="club.club_id" id="club_id"> <input type="file" class="form-control" name='club.he

山鬼谣的专栏 5259

FormData 对象的使用——0725

一、什么是FormData对象? FormData对象用以将数据编译成键值对,以便用XMLHttpRequest来发送数据。 其主要用于发送表单数据,但亦可用于发送带键数据(keyed data),而独立于表单使用。 如果表单enctype属性设为multipart/form-data ,则会使用表单的submit()方法来发送数据,从而,发送数据具有同样形式。 二、从零开始创建FormData对象——发送带键数据 你可以自己创建一个FormData对象,然后调用它的append()方法来添加字段,如下:

张静的博客 606
上一篇: Blob DOM JS
下一篇: 关于html和javascript在浏览器中的加载顺序问题的讨论(zz)
zljjava
博客等级 码龄15年 155粉丝 15原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值