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 相关文章推荐
用Javascript实现Sleep暂停功能代码
Sep 03 Javascript
javascript-表格排序(降序/反序)实现介绍(附图)
May 30 Javascript
JQuery 获取json数据$.getJSON方法的实例代码
Aug 02 Javascript
jQuery中bind,live,delegate与one方法的用法及区别解析
Dec 30 Javascript
jQuery实现加入购物车飞入动画效果
Mar 14 Javascript
js带缩略图的图片轮播效果代码分享
Sep 14 Javascript
详解javascript高级定时器
Dec 31 Javascript
Javascript操作表单实例讲解(下)
Jun 20 Javascript
JS判断输入的字符串是否是数字的方法(正则表达式)
Nov 29 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
Dec 08 Javascript
在一个页面重复使用一个js函数的方法详解
Dec 26 Javascript
Node.js websocket使用socket.io库实现实时聊天室
Feb 20 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
关于尾递归的使用详解
2013/05/02 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
2016/10/18 PHP
PHP crc32()函数讲解
2019/02/14 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
JavaScript中几种常见排序算法小结
2011/02/22 Javascript
jquery 实现上下滚动效果示例代码
2013/08/09 Javascript
javascript制作坦克大战全纪录(1)
2014/11/27 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
JavaScript基于setTimeout实现计数的方法
2015/05/08 Javascript
每天一篇javascript学习小结(面向对象编程)
2015/11/20 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
2016/09/03 Javascript
JavaScript数据结构中串的表示与应用实例
2017/04/12 Javascript
vue-star评星组件开发实例
2018/03/01 Javascript
vue监听键盘事件的快捷方法【推荐】
2018/07/11 Javascript
ZK中使用JS读取客户端txt文件内容问题
2019/11/07 Javascript
在vue中实现某一些路由页面隐藏导航栏的功能操作
2020/09/21 Javascript
[05:16]《大圣!大圣》——DOTA2新英雄齐天大圣配音李世宏老师专访
2016/12/13 DOTA
Python的类实例属性访问规则探讨
2015/01/30 Python
Python读取图片为16进制表示简单代码
2018/01/19 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
2019/04/05 Python
python实现可下载音乐的音乐播放器
2020/02/25 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
pytorch 限制GPU使用效率详解(计算效率)
2020/06/27 Python
python3实现简单飞机大战
2020/11/29 Python
基于CSS3制作立体效果导航菜单
2016/01/12 HTML / CSS
html5超简单的localStorage实现记住密码的功能实现
2017/09/07 HTML / CSS
沃达丰英国有限公司:Vodafone英国
2019/04/16 全球购物
小米俄罗斯授权商店:Xiaomi俄罗斯
2019/12/08 全球购物
公司JAVA开发面试题
2015/04/02 面试题
外语学院毕业生的自我鉴定
2013/11/28 职场文书
中学生团员自我评价分享
2013/12/07 职场文书
煤矿机修工岗位职责
2014/02/07 职场文书
大型活动组织方案
2014/05/10 职场文书
大学生见习报告总结
2014/11/04 职场文书
幼儿教师师德师风自我评价
2015/03/05 职场文书
60句有关成长的名言
2019/09/04 职场文书