jQuery Ajax使用FormData对象上传文件的方法


Posted in Javascript onSeptember 07, 2016

FormData对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单"。 在 Mozilla Developer 网站 使用FormData对象 有详尽的FormData对象使用说明。 但上传文件部分只有底层的XMLHttpRequest对象发送上传请求,那么怎么通过jQuery的Ajax上传呢? 本文将介绍通过jQuery使用FormData对象上传文件。

使用<form>表单初始化FormData对象方式上传文件

HTML代码

<form id="uploadForm" enctype="multipart/form-data">
<input id="file" type="file" name="file"/>
<button id="upload" type="button">upload</button>
</form>

javascript代码

$.ajax({
url: '/upload',
type: 'POST',
cache: false,
data: new FormData($('#uploadForm')[0]),
processData: false,
contentType: false
}).done(function(res) {
}).fail(function(res) {});

这里要注意几点:

processData设置为false。因为data值是FormData对象,不需要对数据做处理。

<form>标签添加enctype="multipart/form-data"属性。

cache设置为false,上传文件不需要缓存。

contentType设置为false。因为是由<form>表单构造的FormData对象,且已经声明了属性enctype="multipart/form-data",所以这里设置为false。

上传后,服务器端代码需要使用从查询参数名为file获取文件输入流对象,因为<input>中声明的是name="file"。 如果不是用<form>表单构造FormData对象又该怎么做呢?

使用FormData对象添加字段方式上传文件

HTML代码

<div id="uploadForm">
<input id="file" type="file"/>
<button id="upload" type="button">upload</button>
</div>

这里没有<form>标签,也没有enctype="multipart/form-data"属性。 javascript代码

var formData = new FormData();
formData.append('file', $('#file')[0].files[0]);
$.ajax({
url: '/upload',
type: 'POST',
cache: false,
data: formData,
processData: false,
contentType: false
}).done(function(res) {
}).fail(function(res) {});

这里有几处不一样:

append()的第二个参数应是文件对象,即$('#file')[0].files[0]。

contentType也要设置为‘false'。 从代码$('#file')[0].files[0]中可以看到一个<input type="file">标签能够上传多个文件, 只需要在<input type="file">里添加multiple或multiple="multiple"属性。

jQuery Ajax使用FormData对象上传文件的方法

后台接收文件:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"/>
</bean>
@RequestMapping(value = "/import_tg_resource")
public ModelAndView import_tg_resource(@RequestParam(value = "file", required = false) MultipartFile[] files, HttpServletRequest request, ModelMap model) {
System.out.println("开始批量上传:文件数量:" + files.length);
for (MultipartFile file : files ) {
String path = request.getSession().getServletContext().getRealPath("upload");
String fileName = file.getOriginalFilename();
String prefix = fileName.substring(fileName.lastIndexOf("."));
fileName = new Date().getTime() + prefix;
// System.out.println("保存路径 " + path);
File targetFile = new File(path, fileName);
if(!targetFile.exists()){
targetFile.mkdirs();
}
file.transferTo(targetFile);
}
}

以上所述是小编给大家介绍的jQuery Ajax使用FormData对象上传文件的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
PPK 谈 JavaScript 的 this 关键字 [翻译]
Sep 29 Javascript
js函数模拟显示桌面.scf程序示例
Apr 20 Javascript
自定义函数实现IE7与IE8不兼容js中trim函数的问题
Feb 03 Javascript
Javascript实现Array和String互转换的方法
Dec 21 Javascript
JavaScript+CSS无限极分类效果完整实现方法
Dec 22 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
Jul 25 Javascript
jQuery实现三级联动效果
Mar 02 Javascript
关于React动态加载路由处理的相关问题
Jan 07 Javascript
jQuery实现高度灵活的表单验证功能示例【无UI】
Apr 30 jQuery
Vue-cli assets SubDirectory及PublicPath区别详解
Aug 18 Javascript
Javascript confirm多种使用方法解析
Sep 25 Javascript
vue中是怎样监听数组变化的
Oct 24 Javascript
jQuery Dialog 取消右上角删除按钮事件
Sep 07 #Javascript
jQuery实现的表格展开伸缩效果实例
Sep 07 #Javascript
JS实现页面载入时随机显示图片效果
Sep 07 #Javascript
JS简单实现浮动窗口效果示例
Sep 07 #Javascript
利用Javascript仿Excel的数据透视分析功能
Sep 07 #Javascript
Vue.js快速入门教程
Sep 07 #Javascript
jQuery实现简洁的轮播图效果实例
Sep 07 #Javascript
You might like
php 信息采集程序代码
2009/03/17 PHP
防止用户利用PHP代码DOS造成用光网络带宽
2011/03/01 PHP
php制作unicode解码工具(unicode编码转换器)代码分享
2013/12/24 PHP
PHP编程风格规范分享
2014/01/15 PHP
Symfony2学习笔记之控制器用法详解
2016/03/17 PHP
JS删除数组元素的函数介绍
2013/03/27 Javascript
判断复选框是否被选中的两种方法
2014/06/04 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
2014/08/18 Javascript
实现无刷新联动例子汇总
2015/05/20 Javascript
用js实现简单算法的实例代码
2016/09/24 Javascript
JavaScript Canvas绘制圆形时钟效果
2020/08/20 Javascript
React+react-dropzone+node.js实现图片上传的示例代码
2017/08/23 Javascript
JavaScript中常见内置函数用法示例
2018/05/14 Javascript
纯JS开发baguetteBox.js响应式画廊插件
2020/06/28 Javascript
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
基于Django与ajax之间的json传输方法
2018/05/29 Python
python3第三方爬虫库BeautifulSoup4安装教程
2018/06/19 Python
Python 使用PIL中的resize进行缩放的实例讲解
2018/08/03 Python
Python绘制的二项分布概率图示例
2018/08/22 Python
python读写csv文件并增加行列的实例代码
2019/08/01 Python
pytorch中的embedding词向量的使用方法
2019/08/18 Python
python使用socket实现的传输demo示例【基于TCP协议】
2019/09/24 Python
python 实现矩阵填充0的例子
2019/11/29 Python
基于python+selenium的二次封装的实现
2020/01/06 Python
纯css3实现的动画按钮的实例教程
2014/11/17 HTML / CSS
伦敦时尚生活的缩影:LN-CC
2017/01/24 全球购物
ECCO英国官网:丹麦鞋履品牌
2019/09/03 全球购物
商业活动邀请函
2014/02/04 职场文书
央视元宵晚会主持串词
2014/03/25 职场文书
学校查摆问题整改措施
2014/09/28 职场文书
个人原因辞职信模板
2015/05/13 职场文书
消费者投诉书范文
2015/07/02 职场文书
初中生物教学随笔
2015/08/15 职场文书
《观察物体》教学反思
2016/02/17 职场文书
Redis 中使用 list,streams,pub/sub 几种方式实现消息队列的问题
2022/03/16 Redis
Mysql中常用的join连接方式
2022/05/11 MySQL