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 相关文章推荐
Extjs学习笔记之八 继承和事件基础
Jan 08 Javascript
jquery png 透明解决方案(推荐)
Aug 21 Javascript
由点击页面其它地方隐藏div所想到的jQuery的delegate
Aug 29 Javascript
如何通过javascript操作web控件的自定义属性
Nov 25 Javascript
jQuery简单实现点击文本框复制内容到剪贴板上的方法
Aug 01 Javascript
AngularJS API之copy深拷贝详解及实例
Sep 14 Javascript
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
Dec 28 Javascript
vue实现a标签点击高亮方法
Mar 17 Javascript
H5+C3+JS实现双人对战五子棋游戏(UI篇)
May 28 Javascript
微信小程序实现下拉菜单切换效果
Mar 30 Javascript
在vue项目中优雅的使用SVG的方法实例详解
Dec 03 Javascript
Vue.js轮播图走马灯代码实例(全)
May 08 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中include和require的区别实例分析
2017/05/07 PHP
jquery multiSelect 多选下拉框
2010/07/09 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
js中的事件捕捉模型与冒泡模型实例分析
2015/01/10 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
js获取元素的外链样式的简单实现方法
2016/06/06 Javascript
js数组的五种迭代方法及两种归并方法(推荐)
2016/06/14 Javascript
基于bootstrap风格的弹框插件
2016/12/28 Javascript
JS批量替换内容中关键词为超链接
2017/02/20 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
AngularJS下$http服务Post方法传递json参数的实例
2018/03/29 Javascript
jQuery中的类名选择器(.class)用法简单示例
2018/05/14 jQuery
解决layui弹框失效的问题
2019/09/09 Javascript
JavaScript多种滤镜算法实现代码实例
2019/12/10 Javascript
js点击事件的执行过程实例分析【冒泡与捕获】
2020/04/11 Javascript
Vue自动构建发布脚本的方法示例
2020/07/24 Javascript
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
2014/06/25 Python
Python OS模块常用函数说明
2015/05/23 Python
CentOS 6.5下安装Python 3.5.2(与Python2并存)
2017/06/05 Python
tensorflow训练中出现nan问题的解决
2018/02/10 Python
对django中render()与render_to_response()的区别详解
2018/10/16 Python
Python二进制文件读取并转换为浮点数详解
2019/06/25 Python
python web框架 django wsgi原理解析
2019/08/20 Python
python函数局部变量、全局变量、递归知识点总结
2019/11/15 Python
解决Tensorflow占用GPU显存问题
2020/02/03 Python
python爬虫请求头设置代码
2020/07/28 Python
自我鉴定怎么写
2013/12/05 职场文书
搬家公司的创业计划书
2014/01/01 职场文书
活动总结的格式
2014/05/07 职场文书
成立公司计划书
2014/05/07 职场文书
2015年度酒店客房部工作总结
2015/05/25 职场文书
院系推荐意见
2015/06/05 职场文书
校运会广播稿
2015/08/19 职场文书
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL
CSS三大特性继承性、层叠性和优先级详解
2022/01/18 HTML / CSS
Java多线程并发FutureTask使用详解
2022/06/28 Java/Android