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 相关文章推荐
js apply/call/caller/callee/bind使用方法与区别分析
Oct 28 Javascript
dojo学习第一天 Tab选项卡 实现
Aug 28 Javascript
使用FlexiGrid实现Extjs表格效果方法分享
Dec 16 Javascript
JS返回iframe中frameBorder属性值的方法
Apr 01 Javascript
JS实现弹出居中的模式窗口示例
Jun 20 Javascript
微信小程序 定义全局数据、函数复用、模版等详细介绍
Oct 27 Javascript
JavaScript的for循环中嵌套一个点击事件的问题解决
Mar 03 Javascript
fetch 使用及如何接收JS传值
Nov 11 Javascript
Vue.js自定义事件的表单输入组件方法
Mar 08 Javascript
vue移动端UI框架实现QQ侧边菜单组件
Mar 09 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
Jul 26 Javascript
vue打包npm run build时候界面报错的解决
Aug 13 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
web方式ftp
2006/10/09 PHP
php下删除一篇文章生成的多个静态页面
2010/08/08 PHP
php返回字符串中所有单词的方法
2015/03/09 PHP
PHP设置Cookie的HTTPONLY属性方法
2017/02/09 PHP
PHP中overload与override的区别
2017/02/13 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
JS延迟加载加快页面打开速度示例代码
2013/12/30 Javascript
js调用百度地图及调用百度地图的搜索功能
2015/09/07 Javascript
jQuery layui常用方法介绍
2016/07/25 Javascript
老生常谈javascript的类型转换
2016/10/12 Javascript
js实现消息滚动效果
2017/01/18 Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
2017/03/31 Javascript
vue系列之动态路由详解【原创】
2017/09/10 Javascript
AngularJS中table表格基本操作示例
2017/10/10 Javascript
nodeJS服务器的创建和重新启动的实现方法
2018/05/12 NodeJs
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
2019/11/13 Javascript
vue实现公共方法抽离
2020/07/31 Javascript
[49:27]LGD vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Linux下多个Python版本安装教程
2018/08/15 Python
django开发post接口简单案例,获取参数值的方法
2018/12/11 Python
Python制作动态字符图的实例
2019/01/27 Python
HTML5 video标签(播放器)学习笔记(二):播放控制
2015/04/24 HTML / CSS
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
.NET常见笔试题集
2012/12/01 面试题
如何反序的迭代一个序列?how do I iterate over a sequence in reverse order
2012/02/04 面试题
计算机毕业生自荐信范文
2014/03/23 职场文书
创先争优活动党员公开承诺书
2014/08/29 职场文书
区政府领导班子个人对照检查材料
2014/09/25 职场文书
党的群众路线对照检查材料思想汇报
2014/09/25 职场文书
个人买房协议书范本
2014/10/06 职场文书
2014年幼师工作总结
2014/11/22 职场文书
先进个人事迹材料
2014/12/29 职场文书
2016年感恩父亲节活动总结
2016/04/01 职场文书
教您:房贷工资收入证明应该怎么写?
2019/08/19 职场文书
python munch库的使用解析
2021/05/25 Python