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动态设置样式实现代码及演示动画
Jan 25 Javascript
基于jQuery实现复选框的全选 全不选 反选功能
Nov 24 Javascript
JavaScript常用的弹出广告及背投广告实现方法
Feb 06 Javascript
移除AngularJS下URL中的#字符的方法
Jun 19 Javascript
在JavaScript应用中实现延迟加载的方法
Jun 25 Javascript
浅析JavaScript Array和string的转换(推荐)
May 20 Javascript
node文件批量重命名的方法示例
Oct 23 Javascript
使用vue2实现购物车和地址选配功能
Mar 29 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
Apr 09 Javascript
jQuery获取随机颜色的实例代码
May 21 jQuery
vue项目搭建以及全家桶的使用详细教程(小结)
Dec 19 Javascript
微信小程序订阅消息(java后端实现)开发
Jun 01 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
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
PHP 日志缩略名的创建函数代码
2010/05/26 PHP
PHP的pcntl多进程用法实例
2015/03/19 PHP
php简单生成随机数的方法
2015/07/30 PHP
javascript 面向对象思想 附源码
2009/07/07 Javascript
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
js实现正方形颜色从下往上升的效果
2014/08/04 Javascript
ie8模式下click无反应点击option无反应的解决方法
2014/10/11 Javascript
node.js中的path.join方法使用说明
2014/12/08 Javascript
JS产生随机数的几个用法详解
2016/06/22 Javascript
AngularJS 所有版本下载地址
2016/09/14 Javascript
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
AngularJS中使用three.js的实例详解
2017/07/21 Javascript
React如何避免重渲染
2018/04/10 Javascript
vue-cli与webpack处理静态资源的方法及webpack打包的坑
2018/05/15 Javascript
微信小程序项目实践之验证码倒计时功能
2018/07/18 Javascript
每周一练 之 数据结构与算法(Stack)
2019/04/16 Javascript
Vue数据绑定简析小结
2019/05/07 Javascript
[02:23]1个至宝=115个英雄特效 最“绿”至宝拉比克“魔导师密钥”登场
2018/12/29 DOTA
Python计算三角函数之asin()方法的使用
2015/05/15 Python
Python爬虫实现百度图片自动下载
2018/02/04 Python
python监控进程状态,记录重启时间及进程号的实例
2019/07/15 Python
python用win32gui遍历窗口并设置窗口位置的方法
2019/07/26 Python
Python实现检测文件的MD5值来查找重复文件案例
2020/03/12 Python
Django media static外部访问Django中的图片设置教程
2020/04/07 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
2020/06/12 Python
详解python3 GUI刷屏器(附源码)
2021/02/18 Python
python pygame 愤怒的小鸟游戏示例代码
2021/02/25 Python
使用HTML和CSS3绘制基本卡通图案的示例分享
2015/11/06 HTML / CSS
CSS3中各种颜色属性的使用教程
2016/05/17 HTML / CSS
基督教卡片、励志礼品、家居装饰等:DaySpring
2018/10/12 全球购物
UNIX特点都有哪些
2016/04/05 面试题
2014离婚协议书范文两篇
2014/09/15 职场文书
房地产项目合作意向书
2015/05/08 职场文书
java中重写父类方法加不加@Override详解
2021/06/21 Java/Android
Nginx反向代理、重定向
2022/04/13 Servers